问一个linux线程同步的问题?

据我的了解,linux下的线程同步必须这样:
pthread_mutex_lock( mutex );
...
pthread_cond_wait( cond, mutex );
...
pthread_mutex_unlock( mutex );

而windows下的线程同步只须要这样:
WaitForSingleObject( event );

看来windows下的线程同步要比linux的简单,我想知道在linux下pthread_cond_wait为什么还需要 mutex ?

有没有类似于windows的方法??
[332 byte] By [leehq-没有读过高中的人] at [2008-1-9]
# 1
pthread_mutex_lock( mutex );
这是共享区加锁!
windows下同样要加锁,也有完全一样的方法。

WaitForSingleObject( event );
是等待特定的事件的,与加锁是两码子事!
linux用sigwait;

awjx-啦啦啦 at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 2
好像sigwait和WaitForSingleObject( event );
还是有一些区别吧···
# 3
WaitForSingleObject( event )阻塞,可设置超时返回或永不返回直到收到信号。
而sigwait好像不阻塞,还没搞透这个用法,楼主去知道告诉我一下:-)
awjx-啦啦啦 at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 4
一个是等待事件,一个是对临界区加锁。
# 5
我就是想知道linux下什么方法可以等同windows下的WaitForSingleObject( event )???
# 6
看来windows下的线程同步要比linux的简单,
少调用2个函数就是简单?......

我想知道在linux下pthread_cond_wait为什么还需要 mutex ?
在进入pthread_cond_wait之后,mutex会被解锁,出来以后会被重新加锁,我想主要是为了下面这样的用法
pthread_mutex_lock(mutex);
pthread_cond_wait(cond, mutex);
pthread_mutex_unlock(mutex);
# 7
我就是想知道linux下什么方法可以等同windows下的WaitForSingleObject( event )???
事件也只是一个(windows)内核对象而已,互斥变量、条件变量也是内核对象,就个人认为它们都是一致的,只是在表述上的不一样而已
在Linux下没有事件的概念,但从理解上事件和条件变量是一个概念,都是需要等待一个当前环境发生所希望的改变后触发,让程序可以继续进行下去
个人见解,仅供参考!
# 8
看来也只能用pthread_cond_wait了···
# 9
mark
evawu999-小九 at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 10
mark?
是什么?
# 11
还有没有高手来指点一下?
# 12
还有没有高手来指点一下?

# 13
我刚刚解决了这个问题,做了CEvent,CMutex,CCriticalSection, CSemaphore等封装类,win32/linux下都可以使用
# 14
SmallBigCat(乱花渐欲迷人眼)
这些我也会封装。

我只想知道linux下除了pthread_cond_wait以外,还有没有什么别的东西可以实现windows里Event的功能?
# 15
楼住小娃娃 请教人要谦虚。你这样的抬杠态度没几个人会搭理你

windows程序写多了你会发现WaitForSingleObject之前都会lock一下。因为你会发现多线程同时WaitForSingleObject时,一旦等待的事件发生你会很难处理。
Arila-陌生人 at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 16
Arila(陌生人)
你娃娃才多大啊,敢教训我?
# 17
应该就是用pthread_cond_wait的,条件满足时唤醒进程。

sigwait不一样,是用来等待信号的。

pthread_cond_wait不能满足你的要求吗?
joyself-独来读网 at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 18
joyself(独来读网)

pthread_cond_wait 能满足我的要求,但是它还要用一个mutex,有点麻烦···
# 19
signal
sigaction
...
qunbinyue at 2007-10-18 > top of Msdn China Tech,Linux/Unix社区,程序开发...
# 20
qunbinyue()
signal岂不是比pthread_cond_wait还要麻烦?
# 21
没有高手指点一下吗?