thread safety in ManualResetEvent

This is a discussion on thread safety in ManualResetEvent within the C# Programming forums, part of the General Programming Boards category; Hello everyone, When we invoke Set/Reset/WaitOne method on an object instance of ManualResetEvent, do we need to make it thread ...

  1. #1
    Registered User
    Join Date
    May 2006
    Posts
    1,579

    thread safety in ManualResetEvent

    Hello everyone,


    When we invoke Set/Reset/WaitOne method on an object instance of ManualResetEvent, do we need to make it thread safe? i.e. make sure only one thread is invoking Set/Reset/WaitOne by some synchronization approach, like lock or Monitor?


    thanks in advance,
    George

  2. #2
    the hat of redundancy hat nvoigt's Avatar
    Join Date
    Aug 2001
    Location
    Hannover, Germany
    Posts
    3,138
    Quote Originally Posted by MSDN
    A manual reset event acts like the gate of a corral. When the event is not signaled, threads that wait on it block, like horses in a corral. When the event is signaled, by calling its Set method, all waiting threads are free to proceed. The event remains signaled until its Reset method is called. This makes the manual reset event an ideal way to hold up threads that need to wait until one thread finishes a task.

    Like horses leaving a corral, it takes time for the released threads to be scheduled by the operating system and to resume execution. If the Reset method is called before all the threads have resumed execution, the remaining threads once again block. Which threads resume and which threads block depends on random factors like the load on the system, the number of threads waiting for the scheduler, and so on. This is not a problem if the thread that signals the event ends after signaling, which is the most common usage pattern. If you want the thread that signaled the event to begin a new task after all the waiting threads have resumed, you must block it until all the waiting threads have resumed. Otherwise, you have a race condition, and the behavior of your code is unpredictable.
    Otherwise, it's derived from WaitHandle and is threadsafe. Wouldn't make much sense to have a non-threadsafe thread-syncronisation object, would it ?
    hth
    -nv

    She was so Blonde, she spent 20 minutes looking at the orange juice can because it said "Concentrate."

    When in doubt, read the FAQ.
    Then ask a smart question.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Multithreading (flag stopping a thread, ring buffer) volatile
    By ShwangShwing in forum C Programming
    Replies: 3
    Last Post: 05-19-2009, 07:27 AM
  2. thread safety using Interlocked
    By George2 in forum C# Programming
    Replies: 0
    Last Post: 05-16-2008, 03:07 AM
  3. Thread safety in WinAPI
    By Magos in forum Windows Programming
    Replies: 5
    Last Post: 05-14-2006, 05:55 PM
  4. CreateThread ?!
    By Devil Panther in forum Windows Programming
    Replies: 13
    Last Post: 11-15-2005, 09:55 AM
  5. pointer to main thread from worker thread?
    By draegon in forum C++ Programming
    Replies: 2
    Last Post: 10-27-2005, 06:35 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21