Skip to content

Instantly share code, notes, and snippets.

@tausen
Created December 11, 2012 20:30
Show Gist options
  • Save tausen/4261887 to your computer and use it in GitHub Desktop.
Save tausen/4261887 to your computer and use it in GitHub Desktop.
pthread, sem_wait, sem_post example
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
sem_t semaphore;
void threadfunc() {
while (1) {
sem_wait(&semaphore);
printf("Hello from da thread!\n");
sem_post(&semaphore);
sleep(1);
}
}
int main(void) {
// initialize semaphore, only to be used with threads in this process, set value to 1
sem_init(&semaphore, 0, 1);
pthread_t *mythread;
mythread = (pthread_t *)malloc(sizeof(*mythread));
// start the thread
printf("Starting thread, semaphore is unlocked.\n");
pthread_create(mythread, NULL, (void*)threadfunc, NULL);
getchar();
sem_wait(&semaphore);
printf("Semaphore locked.\n");
// do stuff with whatever is shared between threads
getchar();
printf("Semaphore unlocked.\n");
sem_post(&semaphore);
getchar();
return 0;
}
@sahin52
Copy link

sahin52 commented May 5, 2021

I needed to write sem_post before sem_wait in order to make it work.

@arshadmustafa34
Copy link

interesting

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment