#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<pthread.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int i; //需要开启多进程的函数 void * fun_1(void * args) { for(i=0;i<10;i++) { sleep(2); pthread_mutex_lock(&mutex);//加锁 printf("1xianchenshangsuo\n"); printf("i=%d\n",i); pthread_mutex_unlock(&mutex);//解锁 printf("1xianchenjiesuo\n"); } return 0; } //需要开启多进程的函数 void * fun_2(void * args) { for(i=0;i<10;i++) { sleep(2); pthread_mutex_lock(&mutex);//加锁 printf("2xianchenshangsuo\n"); printf("i=%d\n",i); pthread_mutex_unlock(&mutex);//解锁 printf("2xianchenjiesuo\n"); } return 0; } int main() { pthread_t id[2]; //创建线程 pthread_create(&id[0],NULL,fun_1,NULL); pthread_create(&id[1],NULL,fun_2,NULL); //等待线程的结束 pthread_join(id[0],NULL); pthread_join(id[1],NULL); }是什么意思
时间: 2024-03-11 15:43:49 浏览: 54
用c语言实现的逆序文本程序
这段代码使用了 POSIX 线程库实现了两个线程交替打印数字的功能。其中 `pthread_mutex_t mutex` 是一个互斥锁,用于保护打印操作的互斥访问。函数 `fun_1` 和 `fun_2` 中使用了互斥锁,分别打印数字并对打印操作进行加锁和解锁。`main` 函数中创建了两个线程,分别执行 `fun_1` 和 `fun_2`,并通过 `pthread_join` 等待两个线程的结束。整个程序的执行过程如下:
1. `main` 函数创建两个线程,分别执行 `fun_1` 和 `fun_2`。
2. `fun_1` 线程执行打印操作前,先对互斥锁进行加锁。
3. `fun_1` 线程打印数字,然后对互斥锁进行解锁。
4. `fun_2` 线程执行打印操作前,先对互斥锁进行加锁。
5. `fun_2` 线程打印数字,然后对互斥锁进行解锁。
6. 重复步骤 2-5,直到两个线程分别打印 10 个数字后退出。
由于两个线程对互斥锁的访问是互斥的,因此可以保证每次只有一个线程打印数字,从而实现了交替打印的效果。
阅读全文