当前位置: 技术问答>linux和unix
关于互斥量的一个问题###
来源: 互联网 发布时间:2016-11-14
本文导语: 在看APUE。 关于线程同步里互斥量,我在网上找了一个实例,但是感觉,它定义的那个互斥量没有和要保护的数据有半点关联啊,就是调用了一下,pthread_mutex_lock,之后又解锁。这样就能实现同步? 就好像你买了一把...
在看APUE。
关于线程同步里互斥量,我在网上找了一个实例,但是感觉,它定义的那个互斥量没有和要保护的数据有半点关联啊,就是调用了一下,pthread_mutex_lock,之后又解锁。这样就能实现同步?
就好像你买了一把锁,都没有把它挂在门上面,自己锁了一下有开了一下,那也能保护房子里的安全吗?
所以想问问在用mutex保护数据的一致性的时候,互斥量是怎么和要保护的数据建立关系的。也就是能让线程知道互斥量锁的是哪一块数据??
关于线程同步里互斥量,我在网上找了一个实例,但是感觉,它定义的那个互斥量没有和要保护的数据有半点关联啊,就是调用了一下,pthread_mutex_lock,之后又解锁。这样就能实现同步?
就好像你买了一把锁,都没有把它挂在门上面,自己锁了一下有开了一下,那也能保护房子里的安全吗?
所以想问问在用mutex保护数据的一致性的时候,互斥量是怎么和要保护的数据建立关系的。也就是能让线程知道互斥量锁的是哪一块数据??
|
对互斥量内部的代码在同一时刻只能有一个线程访问
你什么地方不理解,说具体点
你什么地方不理解,说具体点
|
流程就这样,如果所有的线程都按照这个流程来操作,就可以实现数据的共享保护
pthread_mutex_lock
操作共享数据
pthread_mutex_unlock
pthread_mutex_lock
操作共享数据
pthread_mutex_unlock
|
互斥量就是用来保证操作的“原子性的”,避免在修改数据的时候有人在读取数据。
就好像你买了一把锁,都没有把它挂在门上面,自己锁了一下有开了一下,那也能保护房子里的安全吗?
这么说吧,假设你进门要做事的时候,上锁,保证只有你一个人在房子里面做事(因为只有一个人能拥有这把锁),做完了,再开锁,交出房子给别人用。
这就避免了同一时刻有多个人在房子里面做事 不知道这么说你是否清楚了点
就好像你买了一把锁,都没有把它挂在门上面,自己锁了一下有开了一下,那也能保护房子里的安全吗?
这么说吧,假设你进门要做事的时候,上锁,保证只有你一个人在房子里面做事(因为只有一个人能拥有这把锁),做完了,再开锁,交出房子给别人用。
这就避免了同一时刻有多个人在房子里面做事 不知道这么说你是否清楚了点
|
当一个线程使用共享数据的时候就会锁上,其他线程这时候是不能访问的,只能挂起,知道第一个线程使用完毕,把锁打开,其他的才能开始访问,这就使得共享数据每次只能有一个线程改变它的值。