上一节的例子中,每个线程互相独立,相互之间没有任何关系。现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1。很容易写出这样的代码:# encoding: UTF-8import threadingimport timeclass MyT...
分类:
编程语言 时间:
2015-04-17 20:27:26
阅读次数:
162
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。# import "N...
分类:
其他好文 时间:
2015-04-17 17:44:04
阅读次数:
100
先说说线程
在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.
将一些敏感操作变成原子操作,保证同一时刻多个线程中只有同一个线程在执行这个原子操作。
我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。
除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。
其实在线程中,也可...
分类:
编程语言 时间:
2015-04-16 17:34:25
阅读次数:
217
我们前面讲过的临界区,如同一个小房间,张三进去了,李四就不能进,如果李四要进,必须等张三出来。 今天我们要讲的互斥锁,像一个物件,这个物件只能同时被一个线程持有。如此一来,便可以通过互斥锁来实现线程...
分类:
编程语言 时间:
2015-04-13 19:10:57
阅读次数:
314
目录[-]综述信号量与互斥锁Completions 机制自旋锁其他的一些选择不加锁算法原子变量与位操作seqlock(顺序锁)读取-拷贝-更新(RCU)小结综述在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。首先什么是并发与竟态呢?并发(c...
分类:
系统相关 时间:
2015-04-11 22:21:37
阅读次数:
307
1. 线程的同步与互斥 1.1. 线程的互斥 在Posix Thread中定义了一套专门用于线程互斥的mutex函数。mutex是一种简单的加锁的方法来控制对共享资源的存取,这个互斥锁只有两种状态(上锁和解锁),可以把互斥锁看作某种意义上的全局变量。为什么需要加锁,就是因为多个线程共用进程的资源,要...
分类:
编程语言 时间:
2015-04-11 17:41:52
阅读次数:
239
使用synchronized获取互斥锁的几点说明...
分类:
编程语言 时间:
2015-04-08 23:28:24
阅读次数:
274
一、互斥锁简介POSIX线程同步方法有:POSIX信号量、互斥锁和条件变量。互斥锁可以用于保护关键代码段,以确保其独占式的访问。当进去关键代码段时,我们需要获得互斥锁并将其加锁,等价于二进制信号量的P操作,当离开关键代码段时,我们需要对其解锁,等价于二进制信号量中的V操作。互斥锁基础API:互斥锁属...
分类:
其他好文 时间:
2015-04-08 00:48:08
阅读次数:
181
http://blog.csdn.net/tq02h2a/article/details/4317211看了看linux 2.6 kernel的源码,下面结合代码来分析一下在X86体系结构下,互斥锁的实现原理。代码分析1. 首先介绍一下互斥锁所使用的数据结构:struct mutex {引用计数器1...
分类:
系统相关 时间:
2015-04-02 01:04:36
阅读次数:
274
#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int count = 0;void* function1( void* arg ){ int tmp = 0; while( 1 )...
分类:
编程语言 时间:
2015-04-01 10:50:05
阅读次数:
126