zoukankan      html  css  js  c++  java
  • C++ pthread create and join

    #include <stdlib.h>
    #include <stdio.h>
    #include <uuid/uuid.h>
    #include <time.h>
    #include <sstream>
    #include <stack>
    #include <iostream>
    #include <string.h>
    #include <csignal>
    #include <unistd.h>
    #include <pthread.h>
    
    using namespace std;
    
    void pThread14();
    
    struct BookStruct
    {
        int Id;
        char *Name;
        char *Title;
    };
    
    void *pStruct(void *structP);
    
    int main()
    {
        pThread14();
        return 0;
    }
    
    void pThread14()
    {    
        pthread_t arr[10];
        int rc,i;
        for(i=0;i<10;i++)
        {
            cout<<"main():creating thread,"<<i<<endl;
            struct BookStruct bs;
            bs.Id=i*i;
            bs.Name=(char*)malloc(40);
            bs.Title=(char*)malloc(40);
            retrieveUuid1(bs.Name);
            retrieveUuid1(bs.Title);
            rc=pthread_create(&arr[i],NULL,pStruct,&bs);
            if(rc)
            {
                cout<<"Error:unable to create thread,"<<rc<<endl;
                exit(-1);
            }
            pthread_join(arr[i],NULL);
        }
        pthread_exit(NULL);
    }
    
    
    void *pStruct(void *structP)
    {
        struct BookStruct *bs=(struct BookStruct*)structP;
        cout<<"Id="<<bs->Id<<",Name="<<bs->Name<<",Title="<<bs->Title<<endl;
        pthread_exit(NULL);
    }

    Compile

    g++ -g -std=c++2a -I. h1.cpp -o h1 -luuid -lpthread

    Run ./h1

    Another solution is with pthread_attr_t and status value;

    pthread_attr_t attr;
        void *status;
    
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
    
    pthread_attr_destroy(&attr);
    #include <stdlib.h>
    #include <stdio.h>
    #include <uuid/uuid.h>
    #include <time.h>
    #include <sstream>
    #include <stack>
    #include <iostream>
    #include <string.h>
    #include <csignal>
    #include <unistd.h>
    #include <pthread.h>
    #include <cstdlib>
    
    struct BookStruct
    {
        int Id;
        char *Name;
        char *Title;
    };
    
    void *pStruct(void *structP);
    
    void pthread15();
    
    int main()
    {
        pthread15();
        return 0;
    }
    
     

    void pthread15()
    {
    int i, rc;
    pthread_t arr[10];
    pthread_attr_t attr;
    void *status;

    
    

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

    
    

    for (i = 0; i < 10; i++)
    {
    cout << "main():creating thread," << i << endl;
    struct BookStruct bs;
    bs.Id = i * i;
    bs.Name = (char *)malloc(40);
    bs.Title = (char *)malloc(40);
    retrieveUuid1(bs.Name);
    retrieveUuid1(bs.Title);

    
    

    rc = pthread_create(&arr[i], &attr, pStruct, &bs);

    
    

    if (rc)
    {
    cout << "Error:unable to create thread," << rc << endl;
    exit(-1);
    }

    
    

    rc = pthread_join(arr[i], &status);
    if (rc)
    {
    cout << "Error:unable to join," << rc << endl;
    exit(-1);
    }
    cout << "Main:completed thread id:" << i << ",exiting with status:" << status << endl;

    
    

    }

    
    

    //free attribute and wait for the other status
    pthread_attr_destroy(&attr);
    cout << "Main:program exiting." << endl;
    pthread_exit(NULL);
    }

     

    Compile and run

  • 相关阅读:
    【LeetCode每日一题】2020.6.28 209. 长度最小的子数组
    【《你不知道的JS(中卷①)》】三、原生函数
    【《你不知道的JS(中卷①)》】二、值
    【《你不知道的JS(中卷①)》】一、类型
    【LeetCode每日一题】2020.6.26 面试题 02.01. 移除重复节点
    【LeetCode周赛】第194场周赛
    【LeetCode每日一题】2020.6.25 139. 单词拆分
    ios网络编程(HTTP socket)
    objective c 代码块blocks完整总结二
    objective c 代码块blocks完整总结一
  • 原文地址:https://www.cnblogs.com/Fred1987/p/15672891.html
Copyright © 2011-2022 走看看