gpt4 book ai didi

c、创建线程和线程函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:06 25 4
gpt4 key购买 nike

我在头文件中创建了 dispatch_queue_thread_t 结构。
此代码将线程、任务和队列分配给 dThread 结构

dispatch_queue_thread_t *dThread;
dThread = (dispatch_queue_thread_t *) malloc(sizeof(dispatch_queue_thread_t));

pthread_t dispatcher_thread;

if(pthread_create(&dispatcher_thread, NULL, dispatcher_threadloop, (void *)dispatch_queue)){
perror("ERROR creating thread."); exit(EXIT_FAILURE);
}

dThread->task=NULL;
dThread->queue=dispatch_queue;
dThread->thread=dispatcher_thread;

这段代码是dispatcher_thread的线程函数。
我需要在 dThread 中使用 thread 来检查是否有任何任务分配给它,如果没有则需要将任务分配给它。
我怎么做?我的代码正确吗?

  void *dispatcher_threadloop(void * queue){

//thread loop of the dispatch thread- pass the tast to one of worker thread
dispatch_queue_t *dQueue;
dQueue=queue;

//can I do this?
dispatch_queue_thread_t *dThread;

printf("message-boss1");
dQueue = (dispatch_queue_t *)queue;
if (dQueue->HEAD!=NULL){
for(;;){
sem_wait(dQueue->queue_task_semaphore);
dThread->task = dQueue->HEAD;
dQueue->HEAD = dQueue->HEAD->next;
dQueue->HEAD->prev = NULL;
sem_post(dQueue->queue_task_semaphore);

//TODO
}
}

printf("message-boss2");

}

最佳答案

没有。 dispatcher_threadloop() 中的 dThread 变量未初始化,因此取消引用它是错误的。

似乎您应该将 dThread 传递给线程函数而不是 dispatchQueue,因为线程函数可以从前者获得后者。像这样的东西(注意不需要转换到 void * ):

dispatch_queue_thread_t *dThread;
dThread = malloc(sizeof *dThread);

dThread->task = NULL;
dThread->queue = dispatch_queue;

if (pthread_create(&dThread->thread, NULL, dispatcher_threadloop, dThread)) {
perror("ERROR creating thread.");
exit(EXIT_FAILURE);
}

然后在线程函数中:

void *dispatcher_threadloop(void *arg)
{
dispatch_queue_thread_t *dThread = arg;
dispatch_queue_t *dQueue = dThread->queue;

/* ... */

关于c、创建线程和线程函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006075/

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