- 实现多线程,进程的互斥只需要一把锁
下述代码表明:互斥锁不能决定谁先执行(因为先打的world)
//双线程同时输出会使用互斥锁
#include<stdio.h>
#include<pthread.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
//定义一把互斥锁
pthread_mutex_t mutex;
void * my_printf(void* arg)
{
//访问资源之前上锁,上厕所先关门再拉
pthread_mutex_lock(&mutex);
char* str = (char*)arg;
while (*str)
{
printf("%c",*str++);
fflush(stdout);
sleep(1);
}
//解锁
pthread_mutex_unlock(&mutex);
}
void * my_printf2(void* arg)
{
//上不了锁就会阻塞到这里
pthread_mutex_lock(&mutex);
char* str = (char*)arg;
while (*str)
{
printf("%c",*str++);
fflush(stdout);
sleep(1);
}
//解锁
pthread_mutex_unlock(&mutex);
}
int main(int argc, char const *argv[])
{
//初始化一把锁
pthread_mutex_init(&mutex,NULL);
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,my_printf,"hello");
pthread_create(&tid2,NULL,my_printf2,"world");
//等待线程退出
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
关于信号量实现同步的流程图
所谓p即+1;
v即-1;
这样就实现了sem1先执行,然后再执行sem2,按此循环