- 信号量控制两个线程交替执行代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<semaphore.h>
#include<pthread.h>
#include<stdbool.h>
sem_t sem;
sem_t sem1;
bool flag=1;
bool flag1=1;
void* fun(void* arg)
{
printf("fun thread start\n");
int i=0;
for(;i<5;i++)
{
if(flag1)
{
sem_wait(&sem);
}
printf("fun thread running\n");
sem_post(&sem1);
}
flag=0;
sem_post(&sem1);
printf("fun thread end\n");
return NULL;
}
void destroy()
{
printf("destroy\n");
sem_destroy(&sem);
sem_destroy(&sem1);
}
int main()
{
atexit(destroy);
pthread_t id;
int res=pthread_create(&id,NULL,fun,NULL);
assert(res==0);
int n=sem_init(&sem,0,0);
assert(n==0);
n=sem_init(&sem1,0,1);
assert(n==0);
printf("main thread start\n");
int i=0;
for(;i<8;i++)
{
if(flag)
{
sem_wait(&sem1);
}
printf("main thread running\n");
sem_post(&sem);
}
flag1=0;
sem_post(&sem);
printf("main thread end\n");
}
- 互斥锁实现
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
int xx=0;
pthread_mutex_t mut;
void* thread_1(void* a){
int i =0;
pthread_mutex_lock(&mut);
i+=1;
printf("2B我是线程1 %d次\n",i);
Sleep(3);
xx=0;
pthread_mutex_unlock(&mut);
}
void* thread_2(void* a){
int i =0;
pthread_mutex_lock(&mut);
i+=1;
xx=1;
printf("2B我是线程2 %d次\n",i);
Sleep(3);
xx=0;
pthread_mutex_unlock(&mut);
}
int main(int argc,const char * argv[])
{
pthread_mutex_init( & mut,NULL );
pthread_t star_location_1,star_location_2;
int ret;
ret = pthread_create(&star_location_2, NULL, thread_2,NULL);
if (ret == !0) {
printf("creat_error_2");
}
ret = pthread_create(&star_location_1, NULL, thread_1,NULL);
if (ret == !0) {
printf("creat_error_1");
}
printf("-----");
printf("Bye!\n");
Sleep(10000);
return 0;
}