伪代码障碍:如何处理与线程退出
void * thread_start(void *arg) {
while (1) {
/* for each column. Only run columns the thread_num
is assigned to */
column_count = thread_num;
for (; column_count < dim - 1; column_count+=threads) {
/* do thread work for data chunk */
}
/* barrier */
barrier_result = pthread_barrier_wait(barrier);
if (not_finished == 0) {
/* finished */
break;
/* break while loop, end thread.
The barrier is now broken because it is no longer
getting called by this thread */
}
/* we are not finished, loop around and
do thread work on next data chunk */
}
}
我与障碍的问题是你如何处理与其它线程之前结束线程?
屏障意味着每个线程必须等待每个其他线程。
有什么技术可以确保所有线程同时结束?
我试图延续着的循环,但忽视了“线程的工作”,但在这种情况下,所有8个线程完成,有没有合理的方式来告诉线程“你都做,你现在可以全部退出”
编辑:
算法:
- 上的数据块
- 段运行操作,如果数据块的线程的段完成termina TE。
- 障碍等待。
- 一个线程替换一块数据有一些新的数据
- 重复1
编辑2:
有覆盖一个屏障,一个阻隔任何优雅的方式尺寸较小? (无需在屏障上放置互斥锁)
甚至没有不雅的方式:),你不能复制另一个障碍或在相同的障碍上多次调用'pthread_barrier_init'。 – chill