我有N个线程,他们必须在共享数据上做.
我使用以下结构:
int main(){
pthread_create(..., func, ...);
}
void *func(void *id){
lock;
do_job;
unlock;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是线程似乎顺序工作.如何让它们平行?
它们是串行化的,因为你在整个操作中持有锁.要实际获得并行性,您需要执行以下操作:
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)
诀窍(因为它在任何线程或其他并行化的方式)正在解决你需要序列化的地方,以免破坏事物.这并不容易.
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |