提供的框架正在调用我的函数PartialCodec
。
pthread_create(&(pcPthread[iTd]),NULL,PartialCodec,(void *)&pcMCData[iTd]);
我不允许更改框架代码。但是,在里面PartialCodec
我想为不同的线程分配不同的任务,所以我需要区分每个线程。我怎样才能做到这一点?
提供的框架正在调用我的函数PartialCodec
。
pthread_create(&(pcPthread[iTd]),NULL,PartialCodec,(void *)&pcMCData[iTd]);
我不允许更改框架代码。但是,在里面PartialCodec
我想为不同的线程分配不同的任务,所以我需要区分每个线程。我怎样才能做到这一点?
假设您知道将调用多少个线程PartialCodec
,您可以static
在函数中使用变量来促进线程之间的通信。裸机static
将允许所有线程PartialCodec
操作相同的对象实例。
void * PartialCodec (void *arg) {
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static struct state {
/* some state */
} critical;
struct state local;
pthread_mutex_lock(&lock);
local = critical; /* make a local copy */
/* update critical */
pthread_mutex_unlock(&lock);
/* ... refer to local copy of state ... */
}
状态跟踪特定线程应该解决问题的critical
哪一部分。将其复制到local
确定该线程将在该部分问题上工作。然后critical
更新状态,以便下一个读取的线程critical
知道要处理问题的不同部分。
使用论证,卢克。
您&pcMCData[iTd]
作为线程参数传递。
所以只需在该结构中添加一些字段,告诉线程要处理哪些任务。(显然在创建线程之前设置了这些字段)
pcMCData[iTd].thingToWorkOn = /* however you decide the thing to work on */;
pthread_create(&(pcPthread[iTd],NULL,PartialCodec,(void *)&pcMCData[iTd]);