我正在尝试通过函数发送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:我也在使用流程。
答案 0 :(得分:0)
您必须确保一个线程无法访问对象,而另一个线程可能正在修改它。你还没有这样做,所以结果是不可预测的。
一种解决方案是在查看所有线程之前调用pthread_join
。