如何在C pthreads中并行化线程

1 c multithreading

我有N个线程,他们必须在共享数据上做.

我使用以下结构:

int main(){
    pthread_create(..., func, ...);
}

void *func(void *id){
    lock;
    do_job;
    unlock;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是线程似乎顺序工作.如何让它们平行?

Ben*_*nno 6

它们是串行化的,因为你在整个操作中持有锁.要实际获得并行性,您需要执行以下操作:

void func(void *id) {
    lock;
    do something serialised with shared data;
    unlock;

    do something that can be parallelised safely;

    lock;
    do something else with shared data;
    unlock;
}
Run Code Online (Sandbox Code Playgroud)

诀窍(因为它在任何线程或其他并行化的方式)正在解决你需要序列化的地方,以免破坏事物.这并不容易.