本文对Linux中的pthread_mutex_t做一个简易的封装。 互斥锁主要用于互斥,互斥是一种竞争关系,主要是某一个系统资源或一段代码,一次做多被一个线程访问。 条件变量主要用于同步,用于协调线程之间的关系,是一种合作关系。 Linux中互斥锁的用法很简单,最常用的是以下的几个函数: int ...
分类:
系统相关 时间:
2014-10-06 18:47:20
阅读次数:
188
转自 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
Linux系统中的线程通信方式主要以下几种:*锁机制:包括互斥锁、条件变量、读写锁进程通信:管道(PIPE):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道创建...
分类:
编程语言 时间:
2014-09-26 23:35:48
阅读次数:
246
线程同步
同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性。
假设:进程有一变量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
临界区和互斥锁的区别1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥锁可以用于对象进程间或线程间的互斥访问。2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥锁是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥锁可用
分类:
编程语言 时间:
2014-09-15 12:43:08
阅读次数:
241
读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。互斥锁与读写锁的区别:当访问临界区资源时(访问的含义包括所有的操作:读和写),需要上互斥锁;当对数据(互斥锁中的临界区资源)进行读取时,需要上读取锁,当对数据进行写入时,需要上写...
分类:
其他好文 时间:
2014-09-13 11:53:15
阅读次数:
261
函数lockf()、fcntl()、flock()实现的互斥锁、多写锁的作用域是进程级的,这种锁不能用来保证多线程中数据的安全性和一致性。...
分类:
系统相关 时间:
2014-09-12 17:20:14
阅读次数:
725
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu);另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。/* 等待条件 *//* 注意:pthread_cond_wait为阻...
分类:
编程语言 时间:
2014-09-09 15:02:48
阅读次数:
288
互斥锁是用来保护一段临界区的(每个进程中访问临界资源的那段代码称为临界区),它可以保证在某段时间内只有一个线程在执行一段代码或者访问某个资源。1. 互斥锁的初始化pthread_mutex_init(2)int pthread_mutex_init(pthread_mutex_t *restrict...
分类:
编程语言 时间:
2014-09-09 11:03:18
阅读次数:
238
volatile既然不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。对于java开发人员,我们最熟悉的肯定就是用synchronized关键词完成锁功能,在涉及到多线程并发时,对于一些变量,你应该会毫不犹豫地加上synchronized去保证变...
分类:
其他好文 时间:
2014-09-05 19:58:11
阅读次数:
204