Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Conditional wait and signal in multi-threading

  • Difficulty Level : Medium
  • Last Updated : 06 Jul, 2021

What are conditional wait and signal in multi-threading? 
Explanation: When you want to sleep a thread, condition variable can be used. In C under Linux, there is a function pthread_cond_wait() to wait or sleep. 
On the other hand, there is a function pthread_cond_signal() to wake up sleeping or waiting thread. 
Threads can wait on a condition variable. 

Prerequisite : Multithreading

We provide nothing but the best curated videos and practice problems for our students. Check out the C Foundation Course and master the C language from basic to advanced level. Wait no more, start learning today!

Syntax of pthread_cond_wait() : 

int pthread_cond_wait(pthread_cond_t *restrict cond, 
                   pthread_mutex_t *restrict mutex);

Parameter :  

cond : condition variable
mutex : is mutex lock 

Return Value :  

On success, 0 is returned ; otherwise, an error 
number shall be returned to indicate the error. 

The pthread_cond_wait() release a lock specified by mutex and wait on condition cond variable. 

Syntax of pthread_cond_signal() :  

int pthread_cond_signal(pthread_cond_t *cond);

Parameter : 

cond : condition variable

Return Value :  

On success, 0 is returned ; otherwise, an error number
shall be returned to indicate the error. 

The pthread_cond_signal() wake up threads waiting for the condition variable. 

Note : The above two functions works together. 

Below is the implementation of condition, wait and signal functions.  


// C program to implement cond(), signal()
// and wait() functions
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
// Declaration of thread condition variable
pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER;
// declaring mutex
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int done = 1;
// Thread function
void* foo()
    // acquire a lock
    if (done == 1) {
        // let's wait on condition variable cond1
        done = 2;
        printf("Waiting on condition variable cond1\n");
        pthread_cond_wait(&cond1, &lock);
    else {
        // Let's signal condition variable cond1
        printf("Signaling condition variable cond1\n");
    // release lock
    printf("Returning thread\n");
    return NULL;
// Driver code
int main()
    pthread_t tid1, tid2;
    // Create thread 1
    pthread_create(&tid1, NULL, foo, NULL);
    // sleep for 1 sec so that thread 1
    // would get a chance to run first
    // Create thread 2
    pthread_create(&tid2, NULL, foo, NULL);
    // wait for the completion of thread 2
    pthread_join(tid2, NULL);
    return 0;


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!