Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Monitor.Exit från annan tråd

Postades av 2007-09-18 22:26:05 - Simon Dahlbacka, i forum c# (c-sharp), Tråden har 2 Kommentarer och lästs av 823 personer

Av olika anledningar så behöver vi låsa ett objekt i en tråd mha Monitor.Enter(foo); men sedan låsa upp från en annan tråd, och det funkar ju inte utan smäller med SynchronizationLockException vilket ju är något suboptimalt från vår synvinkel.

- I normala fall så är trådtillhörigheten en bra sak, så vill helst inte byta till Semaphore
- trådarna i frågan är *inte* UI trådar, så SyncronizationContext.Current är null
- Thread.CurrentContext såg lovande ut men funkade inte det heller
- try/catch runt skiten verkar ju funka, men ser ju inte precis snyggt ut...

<b>Så, hur göra?</b>

ps. lite leksakskod om nån vill testa

            Context ctx = Thread.CurrentContext;
            Debug.Print("Current tread {0} ctx id {1}", 
                Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);           
            Monitor.Enter(lockObject);
            ThreadPool.QueueUserWorkItem(delegate(object dummy)
            {
                Debug.Print("Pool tread {0} ctx id {1}", 
                    Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);
                ctx.DoCallBack(delegate()
                {
                    Debug.Print("Cross ctx thread {0} ctx id {1}", 
                        Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);
                    try
                    {

                        Monitor.Exit(lockObject);
                    }
                    catch (SynchronizationLockException) { }                    
                });
            });

            Thread.Sleep(1000);
            if (Monitor.TryEnter(lockObject))
            {
                Debug.Print("success");
                Monitor.Exit(lockObject);
            }



EDIT: Semaphore skall det vara som inte kollar trådtillhörighet


Svara

Sv: Monitor.Exit från annan tråd

Postades av 2007-09-19 11:30:55 - Johan Idstam

Eftersom du i alla fall vill kringå det inbyggda låset känns det nästan lättare att implementera en egen låsmetodik som inte kontrollerar att lås/upplås går på samma tråd.

Min ogenomtänkta måhända naiva lösning skulle vara att lägga in objektet du vill låsa på i en hash-tabell och ta bort den därifrån när du vill låsa upp. Då skulle du kunna använda ett vanligt lock() runt hash-tabellen när du låser, låser upp och kontrollerar om något är låst.

/johan/


Svara

Sv:Monitor.Exit från annan tråd

Postades av 2007-09-19 13:40:36 - Simon Dahlbacka

njae, i så fall bör man väl använda Semaphore istället för att uppfinna ett eget fyrkantigt hjul.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 718
27 958
271 751
3 342
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies