目录
- 一、概述
- 二、实例
- 三、总结
一、概述
这里记录一下pthead的线程用法,最后是通过C实现线程池和理解网络服务器高并发。
二、实例
#include <stdio.h>
#include <pthread.h>
#define MAX 5000
int counter;
void *threadFunc(void *arg) {
int i,val;
for(i = 0; i < MAX; i++) {
val = counter;
printf("%d: %d\n",pthread_self(),val+1);
counter = val +1;
}
return NULL;
}
int main() {
pthread_t tidA,tidB;
pthread_create(&tidA,NULL,&threadFunc,NULL);
pthread_create(&tidB,NULL,&threadFunc,NULL);
pthread_join(tidA,NULL);
pthread_join(tidB,NULL);
return 0;
}
测试:
gcc -o ThreadDemo ThreadDemo.c -lpthread
对counter加入互斥锁
#include <stdio.h>
#include <pthread.h>
#define MAX 5000
pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
int counter;
void *threadFunc(void *arg) {
int i,val;
for(i = 0; i < MAX; i++) {
pthread_mutex_lock(&counter_mutex);
val = counter;
printf("%d: %d\n",pthread_self(),val+1);
counter = val +1;
pthread_mutex_unlock(&counter_mutex);
}
return NULL;
}
int main() {
pthread_t tidA,tidB;
pthread_create(&tidA,NULL,&threadFunc,NULL);
pthread_create(&tidB,NULL,&threadFunc,NULL);
pthread_join(tidA,NULL);
pthread_join(tidB,NULL);
return 0;
}
如果是在提交代码时,全局变量一定是要考虑并发的,函数和变量一定是要考虑作用域的,不然审核者review时一定通不过的。
三、总结
.......