gpt4 book ai didi

c - 在线程函数中使用字符串数组

转载 作者:行者123 更新时间:2023-11-30 17:56:50 25 4
gpt4 key购买 nike

我试图将数组传递给线程函数,以便它可以访问函数中的数组。目前它只包含线程的名称。

const char *a[2];
char *s = "Thread 1";
char *r = "Thread 2";
a[0] = s;
a[1] = r;
pthread_create(&t, NULL, oddhandler, (void *)a[0]);
pthread_create(&y, NULL, evenhandler, (void *)a[1]);

意图是这样写create

pthread_create(&t, NULL, oddhandler, &a);
pthread_create(&y, NULL, evenhandler, &a);

我将如何重写此函数以适应此更改?

static void *
oddhandler(void *p)
{
char *q = (char *)p;
printf("%s is ready.\n", q);
sigset_t set;
int sig = SIGUSR1;

sigemptyset(&set);

sigaddset(&set, SIGUSR1);

while (1) {

/* Wait for SIGUSR1 */
sigwait(&set, &sig);

printf("%s received a SIGUSR1!\n", q);

}

return ((void *)NULL);
}

最佳答案

您可以尝试将线程 ID 与线程数据耦合:

typedef struct thread_info {
int thread_id; // different for every thread
void * thread_data; // the same for every thread
}

正如在示例程序中一样,您可以创建一个函数、处理程序,并让线程根据其 ID 进行调整。

pthread_create(&(t[id], NULL, handler, &(info[i]));

void * handler(void * info) {
thread_info * myInfo = (thread_info *) info;
char *q = ((char *) myInfo->thread_data) + myInfo->thread_id;

// rest of function
}

关于c - 在线程函数中使用字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184914/

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