C++多线程

C++多线程的使用

直接上代码:

#include 
#include 
#include 
#include 
#include "App/CApp.h"

#define THREAD_NUMS 5

typedef struct {
    int num;
    char *msg;
} thread_msg;

void *CallFunc(void *arg){
    thread_msg msg = *(thread_msg*)arg;
    sleep(5-msg.num);
    printf("msg num : %d,msg : %s \n",msg.num,msg.msg);
    return 0;
}

int main(int argc,char * argv[]){
    pthread_t pid[THREAD_NUMS];
    thread_msg msg[THREAD_NUMS];
    for (int i=0;ichar *)"this is msg...";
        int res = pthread_create(&pid[i],NULL,CallFunc,&msg[i]);
        if (res != 0){
            printf("Create Error:%d\n",i);
        }
    }
    pthread_exit(NULL);
}

线程的分离与结合(忘了转哪里的了)
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。
线程的分离状态决定一个线程以什么样的方式来终止自己。在上面的例子中,我们采用了线程的默认属性,即为非分离状态(即可结合的,joinable,需要回收),这种情况下,原有的线程等待创建的线程结束;只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。

#include 
#include 
#include 
#include 
#include "App/CApp.h"

#define THREAD_NUMS 5

void *CallFuncS(void *arg){
    int i = *(int*)arg;
    sleep(5-i);
    printf("num : %d\n",i);
    return 0;
}

int main(int argc,char * argv[]){
    pthread_t pid[THREAD_NUMS];
    pthread_attr_t attr;
    int index[THREAD_NUMS];

//  init threat can joinable
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);

    for (int i=0;iindex[i] = i;
        int res = pthread_create(&pid[i],NULL,CallFuncS,&index[i]);
        if (res != 0){
            printf("Create Error:%d\n",i);
        }
    }
    pthread_attr_destroy(&attr);

    void * status;
    for (int i=0;iint res = pthread_join(pid[i],&status);
        if (res != 0){
            printf("join error:%d\n",i);
        }
        printf("exit status %d\n",status);
    }
    printf("main end\n");
}

你可能感兴趣的:(C++)