Skip to content

Instantly share code, notes, and snippets.

@xypaul
Forked from tausen/gist:4261887
Created October 28, 2015 00:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xypaul/2afc58842d1890716af5 to your computer and use it in GitHub Desktop.
Save xypaul/2afc58842d1890716af5 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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment