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
原创粉丝点击