-1

提供的框架正在调用我的函数PartialCodec

pthread_create(&(pcPthread[iTd]),NULL,PartialCodec,(void *)&pcMCData[iTd]);

我不允许更改框架代码。但是,在里面PartialCodec我想为不同的线程分配不同的任务,所以我需要区分每个线程。我怎样才能做到这一点?

4

2 回答 2

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知道要处理问题的不同部分。

于 2016-04-08T00:33:17.680 回答
0

使用论证,卢克。

&pcMCData[iTd]作为线程参数传递。

所以只需在该结构中添加一些字段,告诉线程要处理哪些任务。(显然在创建线程之前设置了这些字段)

pcMCData[iTd].thingToWorkOn = /* however you decide the thing to work on */;
pthread_create(&(pcPthread[iTd],NULL,PartialCodec,(void *)&pcMCData[iTd]);
于 2016-04-07T23:54:26.800 回答