↓ th分发线程
数组元素 0 1 ...... 9
↑ ↑ ...... ↑
t0 t1 ...... t9 作业线程
如图所示,分发线程th不断的从目录下面读取每一个文件内容,每一个文件的内容放入数组A中的每一个元素中。t0 到 t9 每个线程处理指定的每个数组元素,既t0只处理数组A下标为0的元素内容现在有两种方案:
1,使用读-写锁。th对数组A加写模式锁,线程t0....t9对数组A加读模式锁
2,不加锁。使用一个标志变量int flag等于0或者1,标志每个数组元素内容是否被线程t0...t9处理了。线程th轮询每个数组元素,当某个数组元素内容被处理完之后,th便分发内容给它。
请问,这两种方案是否可行?哪个方案更为优化?多谢大家帮忙了!
数组元素 0 1 ...... 9
↑ ↑ ...... ↑
t0 t1 ...... t9 作业线程
如图所示,分发线程th不断的从目录下面读取每一个文件内容,每一个文件的内容放入数组A中的每一个元素中。t0 到 t9 每个线程处理指定的每个数组元素,既t0只处理数组A下标为0的元素内容现在有两种方案:
1,使用读-写锁。th对数组A加写模式锁,线程t0....t9对数组A加读模式锁
2,不加锁。使用一个标志变量int flag等于0或者1,标志每个数组元素内容是否被线程t0...t9处理了。线程th轮询每个数组元素,当某个数组元素内容被处理完之后,th便分发内容给它。
请问,这两种方案是否可行?哪个方案更为优化?多谢大家帮忙了!
while(!flag && i<1000)
{
i++;
}
if(i>=1000)
没取得资源
else
读写操作
所以应该选第一个,第一个方案更优化
不会发生这种情况,因为只有t0处理完后才释放资源,这时th才能写入.但按你所说的,处理花的时间长,写入的时间短,这就会发生,写入的数据有可能因为不能写入而溢出或丢失