作为我第一次真正尝试使用 pthreads,我正在寻找调整我已经编写的应用程序以使用线程。
我想到的范式基本上是有一个“主”线程,它遍历要处理的数据项列表,为每个线程启动一个新线程,在任何给定时间运行 MAX_THREADS 个线程(直到剩余任务数为小于这个),每个都对列表中的单个数据元素执行相同的任务。
主线程需要知道何时任何线程已完成其任务并返回(或 pthread_exit()'ed),立即启动一个新线程以执行列表中的下一个任务。
我想知道的是人们使用这种设计的首选方法是什么?除了数据方面的考虑,用于完成此任务的最简单的 pthreads 函数集是什么?显然, pthread_join() 是作为“检查”线程的一种手段。
早期的实验一直在使用一个结构,作为 pthread_create() 的最后一个参数传递,它包含一个名为“running”的元素,线程在启动时设置为 true,并在返回之前重置。主线程只是为循环中的每个线程检查此结构元素的当前值。
以下是程序用于线程管理的数据:
typedef struct thread_args_struct
{
char *data; /* the data item the thread will be working on */
int index; /* thread's index in the array of threads */
int thread_id; /* thread's actual integer id */
int running; /* boolean status */
int retval; /* value to pass back from thread on return */
} thread_args_t;
/*
* array of threads (only used for thread creation here, not referenced
* otherwise)
*/
pthread_t thread[MAX_THREADS];
/*
* array of argument structs
*
* a pointer to the thread's argument struct will be passed to it on creation,
* and the thread will place its return value in the appropriate struct element
* before returning/exiting
*/
thread_args_t thread_args[MAX_THREADS];
这看起来像一个声音设计吗?是否有更好、更标准化的方法来监视线程的运行/退出状态,一种更“pthreads-y”的方式?我希望使用最简单、最清晰、最干净的机制,这不会导致任何意外的并发症。
感谢您的任何反馈。