【发布时间】:2015-01-13 14:52:37
【问题描述】:
我正在与 Ant 并行运行几个子任务。
这是build.xml的简化内容:
<target name="parallelOperations">
<var name="port.number" value="9006"/>
<for list="a,b,c,d,e" param="letter" parallel="true">
<sequential>
<echo>Letter @{letter}</echo>
<math result="port.number" operand1="${port.number}" operation="+" operand2="1" datatype="int"/>
<echo>${port.number}</echo>
</sequential>
</for>
</target>
这是主要结果:
[echo] Letter c
[echo] Letter b
[echo] Letter a
[echo] Letter d
[echo] Letter e
[echo] 9007
[echo] 9007
[echo] 9007
[echo] 9007
[echo] 9007
这里发生的是对于列表的每个元素,它打印元素的内容和加号操作的结果。这里的问题是数学运算不是线程保存的,意味着每个运算同时访问变量$port.number,加一个值,然后赋值。
有没有办法用 Ant 做到线程安全?我尝试做的是每个并行运行的子任务,获取一个唯一的端口号。如果有任何其他方法可以做到这一点,它也可能是一个很好的解决方案。
【问题讨论】:
标签: multithreading ant parallel-processing ant-contrib