区分pthread调用的线程

时间:2016-04-07 23:32:28

标签: c linux multithreading pthreads linuxthreads

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

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

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

2 个答案:

答案 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]);