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

  • 相关阅读:
    查看自己的笔记本是否支持64位系统
    关闭445端口
    与postgis相关的一些常用的sql
    postgis 赋予postgresql空间数据库的能力
    ThreadLocal
    获取跨域请求的自定义的response headers
    java Bean的映射工具
    Java多线程学习
    (14)Spring Boot定时任务的使用【从零开始学Spring Boot】
    (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
  • 原文地址:https://www.cnblogs.com/Fred1987/p/15672891.html
Copyright © 2011-2022 走看看