linux多线程以及互斥锁例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pthread_mutex_lock(&mutex);//给 mutex 加锁,这是一条原子操作,不可能出 现两个线程同时执行这个代码
int *a = (int *) arg; printf("thread%d start\n", *a); int i; for (i = 0; i < 10; i++) {
printf("process end\n"); return 0; }
//最恰当的互斥用法
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <errno.h> #include <unistd.h> #include <string.h>
printf("process start\n"); pthread_t thr_d1, thr_d2; int i[2]; i[0] = 1; i[1] = 2;
pthread_create(&thr_d1, NULL, func1, &i[0]); pthread_create(&thr_d2, NULL, func1, &i[1]); pthread_join(thr_d1, NULL); pthread_join(thr_d2, NULL);
pthread_join(thr_d2, NULL);
printf("process end\n"); return 0; }
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//初始化了一个 MUTEX 锁
int count = 0;
void *func1(void *arg) {
int *a = (int *) arg; printf("thread%d start\n", *a); int i; for (i = 0; i < 10; i++) {
printf("thread%d is running\n", *a); sleep(1); } printf("thread%d end\n", *a); pthread_mutex_unlock(&mutex);//给 mutex 解锁 pthread_exit(NULL); }
int main(int arg, char * args[]) {
一旦线程成为可分离线程之后,就不能再使用 pthread_join 了
可分离线程的使用场景 1、主线程不需要等待子线程 2、主线程不关心ຫໍສະໝຸດ Baidu线程的返回码
//互斥锁的例子
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//初始化了一个 MUTEX 锁
void *func1(void *arg) {
printf("thread%d is running\n", *a); sleep(1); pthread_mutex_lock(&mutex);//给 mutex 加锁,这是一条原子操作,不可 能出现两个线程同时执行这个代码 count++;//这段代码受到保护,永远只有一个线程可以操作 pthread_mutex_unlock(&mutex);//给 mutex 解锁 } printf("thread%d end\n", *a);
pthread_exit(NULL); }
int main(int arg, char * args[]) {
printf("process start\n"); pthread_t thr_d1, thr_d2; int i[2]; i[0] = 1; i[1] = 2;
pthread_create(&thr_d1, NULL, func1, &i[0]); pthread_create(&thr_d2, NULL, func1, &i[1]); pthread_join(thr_d1, NULL);
相关文档
最新文档