pthread_cond_wait 之前的 pthread_mutex_lock 语句 有什么作用,可以不用吗?

wd_6532 2005-03-18 09:40:08
pthread_mutex_lock(&m_mutex);
pthread_cond_wait(&m_cond,&m_mutex);
pthread_mutex_unlock(&m_mutex);

在一个生产者多个消费者的情况下,pthread_mutex_lock(&m_mutex);有什么用处.

如果有pthread_mutex_lock(&m_mutex),
那么一个线程阻塞在pthread_cond_wait(&m_cond,&m_mutex);
而其他线程却阻塞在pthread_mutex_lock(&m_mutex)上.

pthread_cond_broadcast(&m_cond);之后
等pthread_cond_wait(&m_cond,&m_mutex);阻塞返回
等另外一个线程突破pthread_mutex_lock(&m_mutex);却已经没有了条件变量的信号.

如果不用pthread_mutex_lock(&m_mutex);,会有什么后果?????

pthread_mutex_lock(&m_mutex);是必须用的吗??
...全文
777 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baojiabao2003 2005-03-22
  • 打赏
  • 举报
回复
不仅仅别的线程不能更改数据结构,而且可以保证你现在被锁上的线程拥有不被打断的权利,通过加锁使你的线程有原子性,可以独占CPU了。从效率和安全性上,都应该加锁
Wolf0403 2005-03-21
  • 打赏
  • 举报
回复
pthread_cond_wait atomically unlocks the mutex (as per pthread_unlock_mutex) and waits for the condition variable cond to be signaled.

因此必需先把 mutex 置为 lock 状态。
qfxx 2005-03-21
  • 打赏
  • 举报
回复
pthread_mutex_lock(&m_mutex)是锁定互斥量,防止多个线程同时操作(特别是写)某一数据结构引发错误结果。一旦锁定,其他线程不能访问改数据结构
参见下面网页
http://www-900.ibm.com/developerWorks/cn/linux/thread/posix_thread2/index.shtml
http://www-900.ibm.com/developerWorks/cn/linux/thread/posix_threadapi/part3/index.shtml
wd_6532 2005-03-20
  • 打赏
  • 举报
回复
要看初始话 谁 的属性

能说明白些吗
sharkhuang 2005-03-19
  • 打赏
  • 举报
回复
要看初始话的属性

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧