pthread函数参数

时间:2015-07-15 21:56:49

标签: c++ c multithreading pthreads

我正在阅读线程池的通用C实现的源代码。

线程池数据结构定义为:

typedef struct _threadpool_st{
    pthread_t *array;
    pthread_mutex_t mutex;
    pthread_cond_t job_posted;
    pthread_cond_t job_taken;
    int arrsz;
    int live; //number of live threads in the pool
    queueHead *theQueue; //queue of work orders
} _thread_pool;

然后有一个函数负责创建线程池

thread pool create_threadpool(int num_threads_in_pool) {
    _threadpool *pool;
    /* irrelevant initializations */
    for(i = 0; i < pool->arrest; i++){
        pthread_create(pool->array + i; NULL, do_work; (void *) pool);
        pool->live = i + 1;
        /* other stuff */
    }
    /* other stuff */
}

do_work函数如下:

void * do_work(void * owning_pool) {
    _threadpool *pool = (_threadpool *)owning_pool;
    int myid = pool->live;
    /* some stuff */
}

我的理解是线程池中的每个线程都应该有自己的“myid” 但是,我认为竞争条件可能会随着实施方式而发生。创建池时,会创建一个执行do_work并传递指向池数据结构的指针的pthread。创建的所有线程都传递给参数数据结构的相同指针。每个线程都应该从该数据结构中读取live的值。但是,主线程(创建pthreads的线程)正在写入此实时变量。这里有什么我想念的吗?活动变量是否应该由池互斥锁保护?

完整的源代码在这里 http://people.clarkson.edu/~jmatthew/cs644.archive/cs644.fa2001/proj/pthreadsPool/

0 个答案:

没有答案