gpt4 book ai didi

c - 在 C 程序中出现错误 "undefined reference to gettid"

转载 作者:太空狗 更新时间:2023-10-29 16:42:42 27 4
gpt4 key购买 nike

这是我的线程子例程...在这里,我创建了 4 个线程并将结构作为参数传递给线程子例程。

我正在尝试使用 getid() 函数打印线程 ID,

我收到错误消息说“未定义对 gettid() 的引用”。

我已经添加了必要的头文件...

#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
#define ARRAYSIZE 17
#define NUMTHREADS 4

struct ThreadData {
int start, stop;
int* array;
};

void* squarer(void* td)
{
struct ThreadData* data=(struct ThreadData*) td;

int start=data->start;
int stop=data->stop;
int* array=data->array;
int i;
pid_t tid1;

tid1 = gettid(); //error at this statement//`
printf("tid : %d\n",tid1);

for (i=start; i<stop; i++) {
sleep(1);
array[i]=i*i;
printf("arr[%d] = [%d]\n",i,array[i]);
}
return NULL;
}

int main(void) {
int array[ARRAYSIZE];
pthread_t thread[NUMTHREADS];
struct ThreadData data[NUMTHREADS];
int i;

int tasksPerThread=(ARRAYSIZE+NUMTHREADS-1)/NUMTHREADS;

for (i=0; i<NUMTHREADS; i++) {
data[i].start=i*tasksPerThread;
data[i].stop=(i+1)*tasksPerThread;
data[i].array=array;
}

data[NUMTHREADS-1].stop=ARRAYSIZE;

for (i=0; i<NUMTHREADS; i++) {
pthread_create(&thread[i], NULL, squarer, &data[i]);
}

for (i=0; i<NUMTHREADS; i++) {
pthread_join(thread[i], NULL);
}

for (i=0; i<ARRAYSIZE; i++) {
printf("%d ", array[i]);
}
printf("\n");

return 0;
}

最佳答案

尝试

#include <unistd.h>
#include <sys/syscall.h>

#ifdef SYS_gettid
pid_t tid = syscall(SYS_gettid);
#else
#error "SYS_gettid unavailable on this system"
#endif

关于c - 在 C 程序中出现错误 "undefined reference to gettid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279649/

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