c++简单实现多线程并测试volatile的作用
来源:互联网 发布:java游戏大合集 编辑:程序博客网 时间:2024/05/17 06:49
class CPthread{public:static int CreatePthread(void* func, void* arg);};
int CPthread::CreatePthread(void* func, void* arg){pthread_t pid;pthread_attr_t attr; if(pthread_attr_init(&attr) != 0){return -1;}if(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0){return -1;}if(pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) != 0){return -1;}if(pthread_create(&pid, &attr, (void*(*)(void*))func, arg) != 0){return -1;}pthread_attr_destroy(&attr);return 0;}
CPthread::CreatePthread((void*)ClientThread, (void*)arg);
或者:
int CPthread::CreatePthread(void *(*func)(void *), void* arg){pthread_t pid;pthread_attr_t attr; if(pthread_attr_init(&attr) != 0){return -1;}if(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0){return -1;}if(pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) != 0){return -1;}if(pthread_create(&pid, &attr, func, arg) != 0){return -1;}pthread_attr_destroy(&attr);return 0;}
CPthread::CreatePthread(ClientThread, (void*)arg);
=========================================
测试程序:
#include <iostream>#include <string>#include <cstdio>#include <pthread.h>#include <unistd.h> volatile static int cnt = 0;int lib_thread_create(pthread_t *threadid, void *pfunction, void *arg, int flag);int lib_thread_create(pthread_t *threadid, void *pfunction, void *arg, int flag){int ret = 0;pthread_attr_t attr;pthread_attr_init(&attr);if(0 == flag){pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);}else if(1 == flag){ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);if(ret < 0){pthread_attr_destroy(&attr); return ret;}} pthread_create(threadid, &attr, (void*(*)(void*))pfunction, arg);pthread_attr_destroy(&attr);return ret;}void getplus(void * arg){//std::cout << pthread_self() << std::endl;int i=0;do{++i;cnt = cnt + 1;std::cout<< pthread_self()<<":"<<cnt << std::endl;sleep(2);}while(i < 50);}void getminus(void* arg){int i=0;do{++i;cnt = cnt - 1;std::cout<< pthread_self()<<":"<<cnt << std::endl;sleep(1);}while(i < 100);}int main(int argc, char *argv[]){pthread_t pid[50] = {0}; for(int i=0; i<50;i++){lib_thread_create(&pid[i], (void*)getplus, NULL, 1);// if( i%2)// {// lib_thread_create(&pid[i], (void*)getplus, NULL, 1);// }// else// {// lib_thread_create(&pid[i], (void*)getminus, NULL, 1);// }}getchar(); return 0;}
带volatile属性时:
打印结果:
2687417248:2481
2666437536:2482
2991627168:2483
2970643360:2484
2949663648:2485
2939173792:2486
2981137312:2487
2960153504:2488
2928683936:2489
2918194080:2490
2907704224:2491
2655947680:2492
2645457824:2493
2634967968:2494
2624478112:2495
2613988256:2496
2603498400:2497
2593008544:2498
2582518688:2499
2572028832:2500
不带volatile属性的打印结果:
2666408864:91
2655919008:92
2645429152:93
2634939296:94
2624449440:95
2613959584:96
2603469728:97
2592979872:98
2582490016:99
2572000160:100
2928655264:66
2918165408:67
2907675552:68
2897185696:69
2886695840:70
2876205984:71
2865716128:72
2855226272:73
2844736416:74
Volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。
它变量的操作具有原子性
- c++简单实现多线程并测试volatile的作用
- c中volatile的作用
- 多线程中volatile 修饰符的作用
- 多线程中volatile关键字的作用
- java 多线程中volatile的作用
- c语言中volatile关键字的作用
- c语言中volatile关键字的作用
- C语言中volatile的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- VS2010配置opencv
- iOS 平板与 Android 平板的交互与动画
- 《Java课程实习》日志(周三)
- leetCode(28):Contains Duplicate II
- [动态规划]0-1背包问题
- c++简单实现多线程并测试volatile的作用
- Ios Swift学习之一基础知识
- Day15(上).多态强化
- QT程序exe文件修改图标
- C++字符串操作集合
- DataTable 導出Excel
- 空闲时的思考1(二维数组存储字符串和指针)
- Ubuntu安装Theano+CUDA
- iOS - 集成环信聊天界面