关于pthread_condi_wait()的使用

最近在研究线程同步,现在遇到一个问题,用pthread_condi_wait()时,用pthread_cond_signal()后怎么再认线程处于block状态呢,比如
void*thread1()
{
while(1)
{
pthread_cond_wait( &cond,& mutex );
printf("\nthread2 get lock!\n"); pthread_mutex_unlock( &mutex ); }
}

int main()
{
while(1)
{
if ()
pthread_codi_signal(coni);
}
}
我现在想实现的是通过cond来同步main()和线程thread1,当满足某个条件时触发使线程运行,否则处于阻塞状态,可是发现线程1 并不阻塞而是一直运行,这是怎么回事呢?

你的用法错了。看一看文档里的示范程序吧。

http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/p/pthread_cond_wait.html

这个例子我看过,不太懂,如果要实现我的功能线程pthread_cond_wait前面要加pthread_mutex_lock()?

你说的没错。
帮助文档里也写得很明白。例子写得很好。抄来改改就是了。
看一下
int pthread_cond_wait( pthread_cond_t* cond, pthread_mutex_t* mutex );
就会明了,Condvar是需要和Mutex一起使用的。因为Condvar Wait其实是分三步的。
先Unlock Mutex->等待->Lock Mutex,然后往下执行。

CONDitional VARiable,状态变量,是用来检测一个指定的状态是否存在而用的。状态变量一定要与一个互斥锁连用。通常的用法看下面的两段代码。

基本的是"pthread_cond_wait()" 这个函数内部,会打开互斥锁(使得别的线程有机会修改状态),并挂起调用线程。当它收到信号后,在退出函数前,会重新锁定互斥锁。

用一个while()的原因是,有可能有多个等待线程;或是在signal()之后,wait()退出之前,状态发生了变化。

//等待线程

pthread_mutex_lock(&mutex);

while (condition is not true) {
    pthread_cond_wait(&condvar, &mutex);
}

// process...

pthread_mutex_unlock(&mutex);

//触发线程

pthread_mutex_lock(&mutex);
// set condition to true;
pthread_cond_signal(&condvar);
pthread_mutex_unlock(&mutex);