🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #505

Re: Threads in C#

#505
From: Stefan Arentz
Date: Fri, 05 Sep 2003 14:40
66 lines
3191 bytes
Luk Vloemans <luk.vloemans@student.luc.ac.be> writes:

> Hey,
> 
> Ik heb een aantal problemen met threads in C#. In de msdn documentatie
> hebben ze het i.v.m. mutual exclusion enkel over threads die dezelfde
> functie uitvoeren. Het gaat er dan om hoe je een kritiek stuk in die
> functie kan locken.
> 
> Wat is nu de precieze betekenis van de lock functie (en zijn argument)?
> 
> Het enige wat mijn bedoeling is, is andere threads voorkomen van hun
> kritische secties binnen te gaan, als de huidige thread in een
> kritieke sectie zit. Ik heb een aantal gedeelde variabelen, die van
> status veranderd moeten worden door de ene thread, om dan opgemerkt te
> worden in de andere (booleanse variabelen). Ik heb twee threads in de
> hoofdklasse, en 1 in een andere klasse.
> 
> De kritische secties bevinden zich trouwens in verschillende methodes
> (vandaar dat het msdn voorbeeld niet erg nuttig was).
> 
> Kan iemand me helpen?

Ik ben meer een Java persoon, maar dit zal wel redelijk kloppen :-)

class Foo
{
   private String mData;

   public Foo(String data)
   {
      mData = data;
   }

   public void Boe()
   {
      lock (mData)
      {
         // Doe iets met mData
      }
   }

   public void Bah()
   {
      lock (mData)
      {
         // Doe iets met mData
      }
   }
}

(Vervang overigens 'lock' met 'synchronize' en het is opeens een Java
voorbeeld :)

Als je nu vanuit meerdere threads de zelfde Foo instance gebruikt dan
zorgen de lock blocks er voor dat er maar 1 thead tegelijk aan mData
kan zitten. Een andere thread zal dan wachten tot de huidige klaar is
en dan de lock claimen.

Het argument van lock() moet een object zijn. De runtime kent dan een
mutex toe aan dat object om de exlusieve toegang te regelen.

Voor details over mutexen (mutual-exclusion locks) moeten je maar zelf
even google raadplegen.

 S.
Technical Details
Message-ID: <87k78nwb61.fsf@keyser.soze.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.kabelfoon.nl!nntpfeed-01.ops.asmr-01.energis-idc.net!news.completel.fr!kleenex.wirehub.nl!news.wirehub.nl!not-for-mail
References: <bja3q9$kfs$1@nl-news.euro.net>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: 107324,47a43a2247029a5f
X-Google-Attributes: gid107324,public
X-Google-Thread: fcea4,47a43a2247029a5f
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-09-05 07:44:43 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.kabelfoon.nl!nntpfeed-01.ops.asmr-01.energis-idc.net!news.completel.fr!kleenex.wirehub.nl!news.wirehub.nl!not-for-mail
From: Stefan Arentz <stefan.arentz@soze.com>
Newsgroups: nl.comp.programmeren,be.comp.programming
Subject: Re: Threads in C#
Date: 05 Sep 2003 16:40:54 +0200
Organization: Wirehub! Internet, The Netherlands
Lines: 66
Message-ID: <87k78nwb61.fsf@keyser.soze.com>
References: <bja3q9$kfs$1@nl-news.euro.net>
NNTP-Posting-Host: newsreader2.wirehub.nl
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Trace: thor.wirehub.nl 1062773049 47986 195.86.128.19 (5 Sep 2003 14:44:09 GMT)
X-Complaints-To: abuse@wirehub.net
NNTP-Posting-Date: 5 Sep 2003 14:44:09 GMT
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
Cache-Post-Path: newsreader2.wirehub.nl!unknown@keyser.soze.com
X-Cache: nntpcache 2.4.0b2 (see http://www.nntpcache.org/)