linux 下c++多线程的简单实现
来源:互联网 发布:α β 滤波算法matlab 编辑:程序博客网 时间:2024/05/22 16:52
#include <iostream>#include <pthread.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>using namespace std;typedef unsigned long int abc ;abc ID[3];pthread_mutex_t lock;class data{public : int Left; int right; int value; data() { Left=0; right=0; value=0; }};void*add(void *data1){for (int i=0; i<2; i++) { pthread_mutex_lock(&lock); /********************************************* 作用:此处上锁,保证参数的唯一性 线程调用该函数让互斥锁上锁, 如果该互斥锁已被另一个线程锁定和拥有, 则调用该线程将阻塞,直到该互斥锁变为可用为止。 成功返回0,否则均错误。 ********************************************/ ((data*)data1)->value= ((data*)data1)->Left+ ((data*)data1)->right; ((data*)data1)->Left++; ((data*)data1)->right++; printf("Thread1:value = %d\n",((data*)data1)->value); pthread_mutex_unlock(&lock); /**************************************************** 与pthread_mutex_lock成对存在。释放互斥锁 ***************************************************/ sleep(1); //linux c下 sleep(minute),里面变量单位是分钟 } pthread_exit(data1); /************************************************ 线程通过执行此函数,终止执行。返回是一个空指针类型 ************************************************/}void *multiplication(void *data1){ for(int i=0;i<2;i++) { pthread_mutex_lock(&lock); ((data*)data1)->value= (((data*)data1)->Left) * (((data*)data1)->right); ((data*)data1)->Left++; ((data*)data1)->right++; printf("Thread2:value = %d\n",((data*)data1)->value); pthread_mutex_unlock(&lock); sleep(1); } pthread_exit(data1);}void thread_create(data* data1){ memset(ID,0,sizeof(ID)); int temp=0; temp=pthread_create(&ID[0],NULL,add,data1); /************************************************ 作用:创建线程。 第一个参数为指向线程标识符的指针。 第二个参数用来设置线程属性。 第三个参数是线程运行函数的起始地址。 最后一个参数是运行函数的参数。 创建线程成功返回0. ************************************************/ if(temp!=0) { perror("第一条创建线程失败:"); } temp=pthread_create(&ID[1],NULL,multiplication,data1); if(temp!=0) { perror("第二条创建线程失败:"); }}void thread_wait(){ if(ID[0] != 0) { printf("%x\n",ID[0]); pthread_join(ID[0], NULL); /*************************************** 作用:等待线程结束,使用此函数对创建的线程资源回收。 参数1:线程id 参数2:用户定义的指针,用来存储被等待线程的返回值。 成功返回0。失败,返回的则是错误号 **************************************/ } if(ID[1] != 0) { printf("%x\n",ID[1]); pthread_join(ID[1], NULL); }}int main(){if(!pthread_mutex_init(&lock,NULL)) { printf("互斥锁初始化成功\n"); } /******************************** pthread_mutex_init 用于C语言函数的多线程编程中,互斥锁的初始化 返回值为零则成功,其他值都为失败 ********************************/ data* data1=new data(); thread_create(data1); thread_wait(); return 0;}
1 0
- linux下内核多线程的简单实现
- linux 下c++多线程的简单实现
- linux下C实现多线程
- 【C语言】linux下简单的聊天室程序(TCP+多线程)
- linux 下实现简单的异步多线程任务分发
- Linux 简单的多线程实现
- 利用多线程实现linux下C语言的聊天室程序:
- 多线程实现文件拷贝(Linux下C++)
- linux下多线程的实现
- linux下Epoll实现简单的C/S通信
- linux下Epoll实现简单的C/S通信
- linux下Epoll实现简单的C/S通信
- Linux下简单的日志功能实现(C语言)
- linux下Epoll实现简单的C/S通信
- linux下Epoll实现简单的C/S通信
- linux平台下C语言实现一个简单的httpsever
- linux下Epoll实现简单的C/S通信(转载)
- linux下Epoll实现简单的C/S通信
- Web前端从入门到放弃(js鼠标拖拽特效)
- Android中双进程守护的实现
- windows下的主从复制以及主主配置
- nuhup/&/screen/at/watch
- php实现动态逐行输出
- linux 下c++多线程的简单实现
- tableView滚动时(渐变)隐藏显示导航栏
- js数组Array探究
- 敏捷开发,极限编程,结对编程介绍
- For faster builds, increase the maximum heap size for the Gradle daemon to at least 4608 MB
- hadoop源码分析-WritableComparator
- 导入模块---Python---K近邻
- 海康威视NVR获取网络摄像头报警信息 C++ 实现
- js中 局部变量、全局变量、闭包