互斥锁mutex
一、mutex使用不使用mutex的多线程打印使用mutex的多线程打印
二、原理mutex的执行方式自旋锁
提示:以下是本篇文章正文内容,下面案例可供参考
一、mutex使用
不使用mutex的多线程打印
#include "stdio.h"
#include "pthread.h"
#define FILENAME "hello.txt"
typedef struct {
FILE *f;
int id;
} f_and_id;
void *doit(void *data){
f_and_id data_val = *(f_and_id *)data;
printf("...%d\n", data_val.id);
int start = data_val.id;
int end = start+1;
FILE *fp = data_val.f;
setbuf(fp, NULL); // 设置无缓冲
for(int i = (start*10);i
int num_thread=5;
pthread_t ths[5];
FILE *fp = fopen(FILENAME, "a+");
f_and_id fids[num_thread];
for(int i=0;i.f=fp, .id=i};
fids[i] = f;
}
for(int i=0;i
printf("thread create failed\n");
return 1;
}
}
for (int i=0; i
FILE *f;
int id;
} f_and_id;
void *doit(void *data){
if(pthread_mutex_lock(&mutex_lock)!=0){
fprintf(stdout, "lock error!\n");
}
f_and_id data_val = *(f_and_id *)data;
printf("...%d\n", data_val.id);
int start = data_val.id;
int end = start+1;
FILE *fp = data_val.f;
setbuf(fp, NULL); // 设置无缓冲
for(int i = (start*10);i
int num_thread=5;
pthread_t ths[5];
FILE *fp = fopen(FILENAME, "a+");
f_and_id fids[num_thread];
for(int i=0;i.f=fp, .id=i};
fids[i] = f;
}
for(int i=0;i
printf("thread create failed\n");
return 1;
}
}
for (int i=0; i |