相关函数:
#include <semaphore.h>
int sem_init(sem_t* sem, int pshared, unsigned int value);
int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
利用信号量来设置线程的执行顺序:
#include <semaphore.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
sem_t sem1,sem2;
void *a_fn(void *arg)
{
sem_wait(&sem1);
printf("the thread a running \n");
return (void *)0;
}
void *b_fn(void *arg)
{
sem_wait(&sem2);
printf("the thread b running \n");
sem_post(&sem1);
return (void *)0;
}
void *c_fn(void *arg)
{
printf("the thread c running \n");
sem_post(&sem2);
return (void *)0;
int main(int argc , char **argv)
{
pthread_t a,b,c;
pthread_create(&a,NULL,a_fn,(void *)0);
pthread_create(&b,NULL,b_fn,(void *)0);
pthread_create(&c,NULL,c_fn,(void *)0);
sem_init(&sem2,0,0);
pthread_join(b,NULL);
pthread_join(c,NULL);
sem_destroy(&sem2);
return 0;
}