gpt4 book ai didi

c - 为什么 typedef 不能与 pthread 一起使用?

转载 作者:行者123 更新时间:2023-11-30 16:56:04 24 4
gpt4 key购买 nike

我正在尝试通过函数发送 typedef。不过我好像做不到。

#define MAX 2
typedef struct
{
unsigned long myPid;
unsigned long parentPid;
unsigned long myTid;
} myProperties;

void* funcproperties(void* arg);
void createthread(myProperties (*properties)[MAX]);

这就是我的 typedef 的定义方式。

void* funcproperties(void* arg)
{
myProperties *properties=(myProperties*) arg;
properties->myPid=getpid();
properties->parentPid=getppid();
properties->myTid=syscall(SYS_gettid);
return NULL;
}

如果我给 properties[0].myPid=getpid() 赋值,就不会出现问题。但是,当我发送 typedef 开始位置的地址(0 或 1)时,它不会。我想知道为什么?也许pthread不支持它?

void createthread(myProperties (*properties)[MAX])
{
pthread_t tids[MAX];

for (int i = 0; i < MAX; i++) {
if ((errno = pthread_create(&tids[i], NULL, funcproperties, properties[i])) != 0)
ERROR(C_ERRO_PTHREAD_CREATE, "pthread_create() failed!");
}
for (int i = 0; i < MAX; i++)
printf("\n PID:%lu DAD: %lu TID: %lu", properties[i]->myPid, properties[i]->parentPid ,properties[i]->myTid);
}

这是我得到的结果(我强制定义 pid。但是,如果我没有记错的话,我得到的是随机值)。

     PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
I 9292 did my job now make yourself served

PS:我也在使用进程。

最佳答案

必须确保一个线程不可能访问一个对象,而另一个线程可能正在修改该对象。您还没有这样做,所以结果是不可预测的。

一种解决方案是在查看所有线程设置的值之前调用 pthread_join

关于c - 为什么 typedef 不能与 pthread 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com