当前位置: 技术问答>linux和unix
问一个linux线程同步的问题?
来源: 互联网 发布时间:2016-01-03
本文导语: 据我的了解,linux下的线程同步必须这样: pthread_mutex_lock( mutex ); ... pthread_cond_wait( cond, mutex ); ... pthread_mutex_unlock( mutex ); 而windows下的线程同步只须要这样: WaitForSingleObject( event ); 看来windows下的线程同步要比l...
据我的了解,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的方法??
pthread_mutex_lock( mutex );
...
pthread_cond_wait( cond, mutex );
...
pthread_mutex_unlock( mutex );
而windows下的线程同步只须要这样:
WaitForSingleObject( event );
看来windows下的线程同步要比linux的简单,我想知道在linux下pthread_cond_wait为什么还需要 mutex ?
有没有类似于windows的方法??
|
看来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);
少调用2个函数就是简单?.......
我想知道在linux下pthread_cond_wait为什么还需要 mutex ?
在进入pthread_cond_wait之后,mutex会被解锁,出来以后会被重新加锁,我想主要是为了下面这样的用法
pthread_mutex_lock(mutex);
pthread_cond_wait(cond, mutex);
pthread_mutex_unlock(mutex);
|
pthread_mutex_lock( mutex );
这是共享区加锁!
windows下同样要加锁,也有完全一样的方法。
WaitForSingleObject( event );
是等待特定的事件的,与加锁是两码子事!
linux用sigwait;
这是共享区加锁!
windows下同样要加锁,也有完全一样的方法。
WaitForSingleObject( event );
是等待特定的事件的,与加锁是两码子事!
linux用sigwait;
|
WaitForSingleObject( event )阻塞,可设置超时返回或永不返回直到收到信号。
而sigwait好像不阻塞,还没搞透这个用法,楼主去知道告诉我一下:-)
而sigwait好像不阻塞,还没搞透这个用法,楼主去知道告诉我一下:-)
|
我就是想知道linux下什么方法可以等同windows下的WaitForSingleObject( event )???
事件也只是一个(windows)内核对象而已,互斥变量、条件变量也是内核对象,就个人认为它们都是一致的,只是在表述上的不一样而已
在Linux下没有事件的概念,但从理解上事件和条件变量是一个概念,都是需要等待一个当前环境发生所希望的改变后触发,让程序可以继续进行下去
个人见解,仅供参考!
事件也只是一个(windows)内核对象而已,互斥变量、条件变量也是内核对象,就个人认为它们都是一致的,只是在表述上的不一样而已
在Linux下没有事件的概念,但从理解上事件和条件变量是一个概念,都是需要等待一个当前环境发生所希望的改变后触发,让程序可以继续进行下去
个人见解,仅供参考!
|
应该就是用pthread_cond_wait的,条件满足时唤醒进程。
sigwait不一样,是用来等待信号的。
pthread_cond_wait不能满足你的要求吗?
sigwait不一样,是用来等待信号的。
pthread_cond_wait不能满足你的要求吗?
|
signal
sigaction
...
sigaction
...
|
mark
|
我刚刚解决了这个问题,做了CEvent,CMutex,CCriticalSection, CSemaphore等封装类,win32/linux下都可以使用