提供的框架正在调用我的函数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]);