LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。
LinkedBlockingQueue内部使用ReentrantLock实现插入锁(putLock)和取出锁(takeLock)。putLock上的条件变量是notFull,即可以用notFull唤醒阻塞在putLock上的线程。takeLo...
分类:
数据库 时间:
2014-09-29 12:56:10
阅读次数:
327
转自 http://blog.csdn.net/hongmy525/article/details/5194006#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/pthrea...
分类:
编程语言 时间:
2014-09-28 10:49:11
阅读次数:
290
//多线程链表添加删除例子(使用条件变量实现互斥): #include #include #include #include #include typedef struct _list_head list_head;struct _list_head{ list_head *next; ...
分类:
其他好文 时间:
2014-09-27 01:26:19
阅读次数:
214
Linux系统中的线程通信方式主要以下几种:*锁机制:包括互斥锁、条件变量、读写锁进程通信:管道(PIPE):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道创建...
分类:
编程语言 时间:
2014-09-26 23:35:48
阅读次数:
246
1
条件变量
条件变量给多个线程提供了一个汇合的场所。
依赖的头文件
#include
函数声明
定义分配条件变量
pthread_cond_t cond =PTHREAD_COND_INITIALIZER;
int pthread_cond_init(pthread_cond_t*restrict cond, const pthread_co...
分类:
编程语言 时间:
2014-09-25 19:16:27
阅读次数:
337
线程同步
同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性。
假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定是i=2;其实不然,如果没有考虑线程同步,i的取值可能是1.我们先考虑自加操作的过程:a,首先将内存中i的值copy到寄存器;b,对寄存器中i的copy进行自加;c,将寄存器中自加的结...
分类:
编程语言 时间:
2014-09-25 14:13:09
阅读次数:
297
Condition的含义是条件变量,其实现依赖于系统,一般都要配合Mutex使用,使用步骤为:给mutex上锁(Lock),调用wait等待“条件”发生,如果没有发生则re-wait(),最后释放mutex(unlock),并继续执行。所有等待(wait)同一个“条件变量(condition)”的线...
分类:
移动开发 时间:
2014-09-21 18:37:51
阅读次数:
410
情景1:Jack开着一辆出租车来到一个站点停车,看见没人就走了。过段时间,Susan来到站点准备乘车,但是没有来,于是就等着。过了一会Mike开着车来到了这个站点,Sunsan就上了Mike的车走了。如图所示:程序实现该情景:#include
#include
#include
#include
pthread_cond_t taxicond = PTHREAD_COND_INITIAL...
分类:
编程语言 时间:
2014-09-17 15:14:32
阅读次数:
288
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu);另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。/* 等待条件 *//* 注意:pthread_cond_wait为阻...
分类:
编程语言 时间:
2014-09-09 15:02:48
阅读次数:
288
1、进程创建int pthread_create (pthread_t * thread_id, __const pthread_attr_t * __attr, void *(*__start_routine) (void *), void *__restrict __arg);第一个参数为指向线...
分类:
编程语言 时间:
2014-09-05 17:42:41
阅读次数:
208