LINUX线程同步初探
来源:互联网 发布:微盘交易源码下载 编辑:程序博客网 时间:2024/05/22 10:23
0x00.什么是线程同步
同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行
同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行
0x01.案例代码
1 void* PthreadFunc(void* argc); 2 int flag_num = 1; 3 4 int main(int argc, char* argv[]) 5 { 6 pthread_t pid; 7 void* ret_val; 8 9 int create_status = pthread_create(&pid, NULL, &PthreadFunc, NULL);10 if(0 != create_status)11 { perror("main()->pthread_create error");12 exit(1);13 }14 15 //input data to public source area16 for(int i = 0; i < 10; ++i)17 {18 if(flag_num == 1)19 {20 printf("1");21 flag_num = 2;22 }else{23 sleep(1);24 }25 }26 27 int join_status = pthread_join(pid, &ret_val);28 if(0 != join_status)29 {30 perror("main()->pthread_join error");31 exit(1);32 }33 34 //print array's data35 for(int i = 0; i < 10; ++i)36 {37 printf("%d ", arr[i]);38 }39 40 return 0;41 }42 43 void* PthreadFunc(void* argc)44 {45 if(flag_num == 2)46 {47 printf("2");48 flag_num = 1;49 }else{50 sleep(1);51 }52 }
执行结果:
reacher@ubuntu:~/projects/proj$ ./syn
1212121212
结论:利用条件避免无休止抢占公共资源
0x02.修改代码获取新知识点 …(⊙_⊙;)
1 void* PthreadFunc(void* argc); 2 int arr[10]; 3 4 int main(int argc, char* argv[]) 5 { 6 pthread_t pid; 7 void* ret_val; 8 9 int create_status = pthread_create(&pid, NULL, &PthreadFunc, NULL);10 if(0 != create_status)11 { perror("main()->pthread_create error");12 exit(1);13 }14 15 //input data to public source area16 for(int i = 0; i < 10; ++i)17 {18 arr[i] = i;19 }20 21 int join_status = pthread_join(pid, &ret_val);22 if(0 != join_status)23 {24 perror("main()->pthread_join error");25 exit(1);26 }27 28 //print array's data29 for(int i = 0; i < 10; ++i)30 {31 printf("%d ", arr[i]);32 }33 34 return 0;35 }36 37 void* PthreadFunc(void* argc)38 {39 for(int i = 0; i < 10; ++i)40 {41 arr[i] = i + 10;42 }43 }
执行代码结果:
reacher@ubuntu:~/projects/proj$ ./syn
10 11 12 13 14 15 16 17 18 19
当时出现结果一脸懵,后来查资料发现了线程是有优先级的:main(for()) 属于主线程,PthreadFunc(for())属于子线程、
主线程的优先级大于子线程,所以main.for()先对arr进行了数据写入,pthread.for()后写入数据,输出结果为线程输入数据
阅读全文
0 0
- LINUX线程同步初探
- Linux线程初探
- Linux线程初探
- Linux线程初探
- linux 线程初探
- Linux线程初探
- linux线程初探
- LINUX线程初探
- linux 线程 线程同步
- 多线程初探(线程的同步)
- 【好程序员特训营】Java线程同步初探
- 【初探】进程通信与线程同步
- linux线程初探(转载)
- linux 线程同步
- Linux中的线程同步
- Linux线程同步
- Linux 下线程同步
- Linux线程同步
- hpuoj 1192: Sequence
- HDU1072-Nightmare【广度优先搜索】
- 猴子下山,动态规划。
- Android 启动过程框架
- TinyXml友员类的复习
- LINUX线程同步初探
- [bzoj4605]崂山白花蛇草水 k-d tree 带替罪羊重构
- POJ 3255 Roadblocks(次短路)
- LINUX信号量实现对公共数据的读写
- sed、akw学习指引
- angular中发布/订阅模式详解
- lua初探
- LUA逻辑运算符OR的使用
- 简单数位DP总结