求解 unix的锁,该如何处理
求解unix的锁strict foo *fh[NHASH]//hash表pthread_mutex_t hashlock PTHREAD_MUTEX_INITIALIZER//互
求解 unix的锁
strict foo *fh[NHASH]; //hash表
pthread_mutex_t hashlock = PTHREAD_MUTEX_INITIALIZER;//互斥量
为什么我有一个线程锁住hashlock这个互斥量以后,其它的线程就不能对fh[NHASH]进行访问了?
hashlock和fh[NHASH]有什么关系吗?
锁住以后其它线程能不能访问fh[NHASH]是不是取决于我实现的对fh[NHASH]操作的函数所决定的?
apue我看晕乎了,求高人指点
[解决办法]
这不是强制性的, 想要互斥的线程需要主动调用pthread_mutex_lock/unlock.
[解决办法]
[解决办法]互斥量hashlock是用来保护临界资源fh[NHASH]不被两个或多个进程访问的;
如果,你不把hashlock和fh[NHASH]放在仪器,那么两者没有任何关系;
你想保护i被互斥访问,只要将i也放进互斥量保护的代码段,也可以实现互斥访问;
保护的机制非常简单,对hashlock的操作是原子操作,如果有一个进程访问fh[NHASH],就让hashlock=0;
别的进程发现 hashlock==0,就无法再访问fh[NHASH]。前一个进程,访问结束后,恢复hashlock=1,于是,正在等待访问的进程就可以被唤醒,而进行访问了。
可见,有了互斥量hashlock就可以保护资源fh[NHASH]不被两个或以上的进程访问。
[解决办法]一个是锁,一个是资源
两者其实没有必然的联系
多个进程/线程互斥访问资源完全是一种君子行为
[解决办法][解决办法][解决办法]另外,互斥量的定义,还包含一个阻塞的队列,不是一个简单的整形数或一个布尔量。