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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2019-12-10 C# DataTable to List<T> based on reflection.
2019-12-10 C# MySql Transaction Async