近期在学习
linux
下的线程控制, 对于线程同步中的互斥锁
和条件变量有些问题,不过在参考了一些书目,还有和同学
讨论后也是有了自己的一些认识和见解,现在分享下。
先看看 互斥锁
API
pthread_mutex_lock(pthread_mutex_t *mutex;
用此函数加锁时,如果
mutex
已经被锁住,当前尝试加锁
的线程就会阻塞,直到互斥锁被其他线程释放。当此函数返
回时,说明互斥锁已经被当前线程成功加锁
.
pthread_mutex_trylock(pthread_mutex_t *mutex);
用此函数加锁时,如果
mutex
已经卑琐主,当前尝试加锁
的线程不会阻塞, 而是立即返回, 返回的错误码为
EBUSY,
而不是阻塞等待。
pthread_mutex_unlock(pthread_mutex_t *mutex);
注意使用锁之前要记得初始化。
互斥锁的初始化 有两种初始化方式
:
1.
对于静态分配的互斥锁一半用宏赋值的方式初始化
eg: static pthread_mutex_t mutex =
PTHREAD_MUTEX_INITIALIZER;
2.
对于动态分配的互斥锁(如调用
malloc
)或分配在共享内
存中,则必须调用
pthread_mutex_init(pthread_mutex
*mutex, pthread_mutexattr_t *mutexattr)
函数来进行初始
化。
有时候省略了初始化操作代码,因为它所在的实现把初始化
常值定义为
0
(而且静态分配的变量被自动初始化为
0
)
,
不
过省略初始操作是不正确的!
评论0
最新资源