RAII手法是 Resource Acquisition is Initialization 的缩写,意为“资源获取即初始化”,在使用智能指针时也使用,下面是针对互斥量时的实现, 1 #include 2 #include 3 4 using namespace std; 5 6 class...
分类:
其他好文 时间:
2014-10-16 16:09:32
阅读次数:
141
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。int pthread_cond_wait(pthread_cond_t *cond...
分类:
其他好文 时间:
2014-10-13 17:27:29
阅读次数:
417
IPC是进程间通信的简称.传统上该术语描述的是运行在某个操作系统之上的不同进程间消息传递的不同方式.我们讨论分为四个领域:消息传递(管道,FIFO,消息队列(system v消息队列,posix消息队列));同步(互斥锁,条件变量,读写锁,信号灯)共享内存区(匿名共享内存区,有名共享内存区)过程调用...
分类:
系统相关 时间:
2014-10-11 19:06:56
阅读次数:
237
synchronized与lock 都是用来实现线程同步的锁,synchronized对象锁,lock是一个接口,她的实现有reentrantlock互斥锁以及ReentrantReadWriteLock共享锁。这里说明一下ReentrantReadWriteLock共享锁,所谓共享就是该锁提供读读...
分类:
其他好文 时间:
2014-10-10 19:16:04
阅读次数:
211
理解并发编程的一些基本概念很重要,给我们思考问题指明一个基本的方向。这篇说一说锁的一些基本概念。
在通常情况下我们说的锁都指的是“互斥”锁,因为在还存在一些特殊的锁,比如“读写锁”,不完全是互斥的。这篇文章说的锁专指互斥锁。
锁是处理并发的一种同步手段。单线程程序和并发程序的最终目的都是要保证程序的正确性,但是最大的区别是:
单线程程序的正确性只关注程序的运行结果和目标是一致...
分类:
其他好文 时间:
2014-10-09 01:59:38
阅读次数:
165
生产者,消费者问题是有关互斥锁(MutexLock)、条件变量(Condition)、线程(Thread)的经典案例;描述的问题可以叙述为 生产者往buffer中投放产品,而消费者则从buffer中消费产品。生产着消费者问题的难点在于:为了缓冲区数据的安全性,一次只允许一个线程进入缓冲区投放或者消费...
分类:
系统相关 时间:
2014-10-08 02:39:14
阅读次数:
304
搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用python直观的演示一下。
死锁的一个原因是互斥锁。假设银行系统中,用户a试图转账100块给用户b,与此同时用户b试图转账200块给用户a,则可能产生死锁。
2个线程互相等待对方的锁,互相占用着资源不释放。
#coding=utf-8
import time
import threading
class Acco...
分类:
编程语言 时间:
2014-10-07 20:38:43
阅读次数:
172
本文对pthread_mutex_t 进行简易的封装;互斥锁主要用于互斥,描述的是一种竞争关系,主要是一个 一种资源或者代码, 在一段时间内 至多能被一个程序访问。而条件变量主要用于线程间同步, 描述的是一种协作关系。Linux中互斥锁的应用比较简单,通用的有以下几个函数:1 int pthread...
分类:
系统相关 时间:
2014-10-06 22:44:20
阅读次数:
241
由于pthread系列的函数都是成功时返回0,我们需要一段判断处理错误的代码:#define TINY_CHECK(exp)\ if(!exp)\ { \ fprintf(stderr, "File : %s, Line : %d Exp : ...
分类:
系统相关 时间:
2014-10-06 21:11:10
阅读次数:
248
本篇我们将讨论线程Thread、互斥锁MutexLock、条件变量Condition的封装;说明:1、MutexLock、Condition利用构造函数和析构函数自动完成资源的申请和释放;2、MutexLock、Condition和Thread 都涉及到系统资源,这些类全部为不可复制的;例如,a程序...
分类:
系统相关 时间:
2014-10-06 18:49:20
阅读次数:
278