| <?xml version="1.0"?>
|
| <!-- |
| Copyright 2002-2004 The Apache Software Foundation |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
|
|
| <!--
|
| This test shows coordinating between 2 threads using
|
| mutexes with wait/notify. Numbers between threads
|
| should increment together.
|
| -->
|
|
|
| <jelly xmlns="jelly:core" xmlns:threads="jelly:threads">
|
|
|
| <!-- get the mutex -->
|
| <threads:mutex var="mutex"/>
|
|
|
| <threads:thread var="thread1">
|
| <set var="counter1" value="0"/>
|
|
|
| <!-- get the mutex -->
|
| <threads:synchronize mutex="${mutex}">
|
| <!-- loop -->
|
| <while test="${counter1 != 20}">
|
|
|
| <whitespace>
|
| counter1: ${counter1}
|
| </whitespace>
|
|
|
| <set var="counter1" value="${counter1+1}"/>
|
|
|
| <!-- let the other thread proceed -->
|
| <threads:notify mutex="${mutex}"/>
|
|
|
| <!-- wait for 1 iteration of the other thread -->
|
| <threads:wait mutex="${mutex}"/>
|
| </while>
|
|
|
| <!-- let the other thread proceed -->
|
| <threads:notify mutex="${mutex}"/>
|
|
|
| </threads:synchronize>
|
| </threads:thread>
|
|
|
| <threads:thread var="thread2">
|
| <set var="counter2" value="0"/>
|
| <threads:sleep for="100"/>
|
| <!-- get the mutex -->
|
| <threads:synchronize mutex="${mutex}">
|
| <!-- loop -->
|
| <while test="${counter2 != 20}">
|
|
|
| <whitespace>
|
| counter2: ${counter2}
|
| </whitespace>
|
|
|
| <set var="counter2" value="${counter2+1}"/>
|
|
|
| <!-- let the other thread proceed -->
|
| <threads:notify mutex="${mutex}"/>
|
|
|
| <!-- wait for 1 iteration of the other thread -->
|
| <threads:wait mutex="${mutex}"/>
|
| </while>
|
|
|
| <!-- let the other thread proceed -->
|
| <threads:notify mutex="${mutex}"/>
|
|
|
| </threads:synchronize>
|
| </threads:thread>
|
|
|
| <whitespace>
|
| [main]: waiting for threads to finish
|
| </whitespace>
|
|
|
| <threads:join thread="${thread1}"/>
|
| <threads:join thread="${thread2}"/>
|
|
|
| <whitespace>
|
| [main]: threads are now done
|
| </whitespace>
|
|
|
| </jelly> |