当前位置: 技术问答>linux和unix
linux下临界区和互斥锁的关系
来源: 互联网 发布时间:2016-07-30
本文导语: windows下说有临界区和互斥锁两个概念,但实现的同样的功能 linux下的临界区我理解的是:通过设置线程的不可取消的属性来实现的,一旦进入临界区,在离开临界区之前它将无法取消,这个属性能当做一种“互斥锁...
windows下说有临界区和互斥锁两个概念,但实现的同样的功能
linux下的临界区我理解的是:通过设置线程的不可取消的属性来实现的,一旦进入临界区,在离开临界区之前它将无法取消,这个属性能当做一种“互斥锁机制”用吗,
account_balance[to_acct] +=dollars;
account_balance[from_act] -= dollars;
在两个线程中对account_balance[]操作,
是不是同时还要加互斥锁
pthread_mutex_lock(.....)
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&old_cancel_state);
account_balance[to_acct] +=dollars;
account_balance[from_act] -= dollars;
pthread_setcancelstate(old_cancel_state,NULL);
pthread_mutex_unlock(.....);
望指教
linux下的临界区我理解的是:通过设置线程的不可取消的属性来实现的,一旦进入临界区,在离开临界区之前它将无法取消,这个属性能当做一种“互斥锁机制”用吗,
account_balance[to_acct] +=dollars;
account_balance[from_act] -= dollars;
在两个线程中对account_balance[]操作,
是不是同时还要加互斥锁
pthread_mutex_lock(.....)
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&old_cancel_state);
account_balance[to_acct] +=dollars;
account_balance[from_act] -= dollars;
pthread_setcancelstate(old_cancel_state,NULL);
pthread_mutex_unlock(.....);
望指教
|
线程的cancel属性不能用来代替互斥锁的作用的,虽然某些时候,可以被cancel的线程能够保证独占临界区。两者(cancel和mutex)也没有什么直接的联系。cancel主要用于多个线程协作完成某个任务,当其中一个首先完成了以后,它就可以cancel掉其它的了。
你要是想进入临界区,只需要在进入之前lock()一下mutex,出去之前unlock()一下就可以了。
|
在我的印象中取消和锁没有太多的关系吧。取消是取消一个线程。锁是为了保护全局变量(或其他东东),加锁和解锁必须成对(否则可能死锁)。