提供的框架正在调用我的函数PartialCodec
。
pthread_create(&(pcPthread[iTd]),NULL,PartialCodec,(void *)&pcMCData[iTd]);
我不允许更改框架代码。但是,在PartialCodec
里面我想为不同的线程分配不同的任务,所以我需要区分每个线程。我怎么能这样做?
答案 0 :(得分:1)
假设您知道有多少线程将调用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
的下一个线程将知道该问题的不同部分。
答案 1 :(得分:0)
使用论证,Luke。
您正在传递&pcMCData[iTd]
作为主题参数。
所以只需在该结构中添加一些字段,告诉线程要处理哪些任务。 (显然在创建线程之前设置这些字段)
pcMCData[iTd].thingToWorkOn = /* however you decide the thing to work on */;
pthread_create(&(pcPthread[iTd],NULL,PartialCodec,(void *)&pcMCData[iTd]);