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

  • 相关阅读:
    shop++之language
    shop++改造之ResponseEntity的坑
    shop++改造之Filter类
    mysql关联模糊查询他表字段
    mysql一张表多个字段关联另一张表查询
    html页面导出为excel表格
    layui打印html页面转成pdf
    jQuery视频格式的验证
    jQuery图片灯箱和视频灯箱
    空间谱专题16:信号个数估计
  • 原文地址:https://www.cnblogs.com/Fred1987/p/15672891.html
Copyright © 2011-2022 走看看