#include stdioh#include stdlibh#include pthreadh#include windowshtypedef struct QueueNode int id; struct QueueNode next;QueueNode;typedef struct TaskQueue QueueNode front; QueueNode rear
这段代码实现了一个多线程并发执行任务的程序。主要的设计思想是使用一个任务队列来存储需要执行的任务,每个线程从队列中获取任务并执行,直到队列为空。主线程负责将任务添加到队列中,并在所有任务执行完毕后结束程序。
具体的设计包括以下几个部分:
-
定义了一个结构体QueueNode来表示任务队列中的节点,包含任务的id和指向下一个节点的指针。
-
定义了一个结构体TaskQueue来表示任务队列,包含队列的头节点和尾节点。
-
实现了初始化队列的函数InitQueue,将队列初始化为空队列。
-
实现了入队函数EnQueue,将一个新的任务添加到队列的尾部。
-
实现了出队函数DeQueue,从队列的头部取出一个任务并返回任务的id。
-
实现了获取下一个任务的函数GetNextTask,用于获取队列中的下一个任务。
-
定义了全局变量thread_count和finished,分别表示线程的数量和所有任务是否执行完毕。
-
使用互斥锁mutex和mutex2来保护对任务队列的访问,使用条件变量cond来实现线程的同步。
-
实现了任务函数task,每个线程执行该函数来获取任务并执行。在任务队列为空时,线程会等待条件变量的信号,直到有新的任务添加到队列中或者所有任务执行完毕。
-
主线程负责将任务添加到队列中,并在所有任务执行完毕后结束程序
原文地址: https://www.cveoy.top/t/topic/h6s8 著作权归作者所有。请勿转载和采集!