首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

shell脚本中创建多线程的有关问题

2013-04-02 
shell脚本中创建多线程的问题如题,一个很简单的需求,希望在shell中以类似“多线程”的形式处理数据。大致需求

shell脚本中创建多线程的问题
如题,一个很简单的需求,
希望在shell中以类似“多线程”的形式处理数据。

大致需求为:
有一个很大的文件,
希望有多个线程分别读取其中的一段,并将结果存入一个单独的文件中。

大致的代码如下:


#10个线程
numWorders=10

#原始文件的行数
numAllPtn=`wc -l $rawPtnPath | awk '{print $1}'`
echo "numAllPtn:"$numAllPtn

#每个线程处理的行数
numPtnPerWorker=$[$numAllPtn/$numWorders+1]
echo "numPtnPerWorker:"$numPtnPerWorker

curBeg=0
curEnd=0
curNum=$numPtnPerWorker

#循环创建这些线程
for((i=1;i<=$numWorders;++i)); do
{

  #当前线程处理的原文件的最后一行
  curEnd=$[$curBeg+$numPtnPerWorker]
  if [ $curEnd -gt $numAllPtn ]
  then
    curEnd=$numAllPtn
  fi
  
  #当前线程处理的原文件的行数
  curNum=$[$curEnd-$curBeg]

  echo "curEnd:"$curEnd" - curNum:"$curNum

  curBeg=$curEnd

  #当前线程处理后,写入的结果文件
  curResPtnFile=$resPtnDir"/part_"$i

  # call function,把当前线程要处理的原文件、结果文件、最后一行、行数作为参数传入
  #  WorkerFunc $rawPtnPath $curResPtnFile $curEnd $curNum

}
#}&  # 问题就在这里!!
done


如果在for循环结束的"}"后面添加"&"(为了创建后台线程),
则for循环中的curEnd和curNum就一直不变;
而不添加"&",则curEnd正常递增。

请问,该如何是其中的curEnd和curNum在多线程模式下正常改变啊?

[解决办法]
子进程是父进程的副本, 子进程变, 父进程看不到.
[解决办法]
将变量export 声明下

热点排行