<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wojciech Jamrozy blog &#187; Synchronizing</title>
	<atom:link href="http://www.wojtekrj.net/tag/synchronizing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wojtekrj.net</link>
	<description>Blog about computer science, programming and linux</description>
	<lastBuildDate>Sun, 23 Oct 2011 21:57:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[Python] Synchronization and threading examples</title>
		<link>http://www.wojtekrj.net/2009/08/python-synchronization-examples/</link>
		<comments>http://www.wojtekrj.net/2009/08/python-synchronization-examples/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 16:08:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Synchronizing]]></category>
		<category><![CDATA[Threads]]></category>

		<guid isPermaLink="false">http://www.wojtekrj.net/?p=213</guid>
		<description><![CDATA[I want to present my code in Python solving Senate Bus Problem from The Little book of Semaphores (page 211). I&#8217;ve used several synchronizing objects such as Lock, Thread, Condition and Semaphore. Here is link to Python threading library. #!/usr/bin/env python # Wojciech Jamrozy # Script written during Operating Systems course VI 2009 # Problem: [...]]]></description>
			<content:encoded><![CDATA[<p>I want to present my code in Python solving Senate Bus Problem from <a href="http://www.greenteapress.com/semaphores/downey08semaphores.pdf ">The Little book of Semaphores</a> (page 211). I&#8217;ve used several synchronizing objects such as  Lock, Thread, Condition and Semaphore.<br />
<a target="_blank" href="http://docs.python.org/library/threading.html">Here </a>is link to Python threading library.</p>
<p><span id="more-213"></span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># Wojciech Jamrozy</span>
<span style="color: #808080; font-style: italic;"># Script written during Operating Systems course VI 2009</span>
<span style="color: #808080; font-style: italic;"># Problem: The Senate Bus Problem</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">time</span> <span style="color: #ff7700;font-weight:bold;">import</span> sleep
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">threading</span> <span style="color: #ff7700;font-weight:bold;">import</span> Lock, Thread, Condition, Semaphore
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">random</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">random</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
waiting_passengers = <span style="color: #ff4500;">0</span>
<span style="color: #dc143c;">mutex</span> = Lock<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
bus = Condition<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
on_board = Semaphore<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Configuration:
        NUMBER_OF_BUSES = <span style="color: #ff4500;">15</span>
        NUMBER_OF_PASSENGERS = <span style="color: #ff4500;">100</span>
        BUS_DELAY = <span style="color: #ff4500;">5</span>
        PASSENGER_DELAY = .8
        TIME_OF_BOARDING = <span style="color: #ff4500;">1</span>
        SEATS = <span style="color: #ff4500;">10</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Bus<span style="color: black;">&#40;</span>Thread<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, numer<span style="color: black;">&#41;</span>:
        Thread.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">numer</span> = numer
    <span style="color: #ff7700;font-weight:bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">mutex</span>.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Bus %d arrived&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">numer</span>,<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">global</span> waiting_passengers
        n = <span style="color: #008000;">min</span><span style="color: black;">&#40;</span>waiting_passengers, Configuration.<span style="color: black;">SEATS</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
            bus.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            bus.<span style="color: black;">notify</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            bus.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            on_board.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            waiting_passengers -= <span style="color: #ff4500;">1</span>
        sleep<span style="color: black;">&#40;</span>Configuration.<span style="color: black;">TIME_OF_BOARDING</span><span style="color: #66cc66;">*</span><span style="color: #dc143c;">random</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Bus %d departed&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">numer</span>,<span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">mutex</span>.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Passenger<span style="color: black;">&#40;</span>Thread<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, numer<span style="color: black;">&#41;</span>:
        Thread.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">numer</span> = numer
    <span style="color: #ff7700;font-weight:bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">global</span> waiting_passengers
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Passenger %d has come&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">numer</span>,<span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">mutex</span>.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        waiting_passengers += <span style="color: #ff4500;">1</span>
        <span style="color: #dc143c;">mutex</span>.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        bus.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        bus.<span style="color: black;">wait</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Passenger %d is on board&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">numer</span>,<span style="color: black;">&#41;</span>
        bus.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        on_board.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> CreateBuses<span style="color: black;">&#40;</span>Thread<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>Configuration.<span style="color: black;">NUMBER_OF_BUSES</span><span style="color: black;">&#41;</span>:
            b = Bus<span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>
            b.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            sleep<span style="color: black;">&#40;</span><span style="color: #dc143c;">random</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">*</span>Configuration.<span style="color: black;">BUS_DELAY</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Creating buses finished - nacisnij ENTER aby zakonczyc&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> CreatePassengers<span style="color: black;">&#40;</span>Thread<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>Configuration.<span style="color: black;">NUMBER_OF_PASSENGERS</span><span style="color: black;">&#41;</span>:
            o = Passenger<span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>
            o.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            sleep<span style="color: black;">&#40;</span><span style="color: #dc143c;">random</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">*</span>Configuration.<span style="color: black;">PASSENGER_DELAY</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Creating passengers finished - press ENTER in order to finish&quot;</span>
&nbsp;
busy = CreateBuses<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
passengers = CreatePassengers<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
busy.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
passengers.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Press any key in order to finish<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span> 
<span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><a class="a2a_button_wykop" href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Wykop" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Digg" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a><a class="a2a_button_msdn" href="http://www.addtoany.com/add_to/msdn?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="MSDN" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/msdn.png" width="16" height="16" alt="MSDN"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_technotizie" href="http://www.addtoany.com/add_to/technotizie?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="Technotizie" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technotizie.png" width="16" height="16" alt="Technotizie"/></a><a class="a2a_button_technet" href="http://www.addtoany.com/add_to/technet?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;linkname=%5BPython%5D%20Synchronization%20and%20threading%20examples" title="TechNet" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technet.png" width="16" height="16" alt="TechNet"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F08%2Fpython-synchronization-examples%2F&amp;title=%5BPython%5D%20Synchronization%20and%20threading%20examples" id="wpa2a_2">Share/Save</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.wojtekrj.net/2009/08/python-synchronization-examples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

