• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux

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);是必须用的吗??
...全文
697 点赞 收藏 5
写回复
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日
要看初始话的属性
回复 点赞
发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7098

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告