Re: mutex problems on Windows
- From: Chris Vine <chris cvine freeserve co uk>
- To: Dov Grobgeld <dov grobgeld gmail com>
- Cc: Gnome List <gtk-list gnome org>
- Subject: Re: mutex problems on Windows
- Date: Tue, 7 Jul 2009 00:16:47 +0100
On Mon, 6 Jul 2009 17:13:07 +0300
Dov Grobgeld <dov grobgeld gmail com> wrote:
> I'm having a problem with GMutex under Windows that don't lock. The
> behaviour is definitely different from that under Linux.
> The system is composed of to threads. A gui thread G and a worker
> thread W. The ping pong between the threads via a mutex j->M should
> work as follows. j is a job data structure that carries info between
> the worker thread and the gui thread.
> 1. W locks j->M through g_mutex_lock(j->M) so that a subsequent
> lock will block.
> 2. W fills in j with various info to display.
> 3. W calls g_idle_add(GSourceFunc(cb_update_job), j) to indicate
> to G that there is info to display.
> 4. W blocks on M through a second call to g_mutex_lock(j->M)
> 5. G is called in cb_update_job() and updates the gui, also
> possibly updates j, and then does g_mutex_unlock(j->M)
> 6. W wakes up and does a g_mutex_unlock(j->M) as it no longer
> needs the lock on the mutex.
> 7. W examines the return info that G filled in into j and contiues
> or aborts its operation.
> The problem on Win32 is that g_mutex_lock in 4 doesn't block and the
> thread continues, which eventually will cause the system to crash.
> Is something supposed to be different under Windows, or should I file
> a bug?
This won't work. Mutexes have ownership once locked. An unlock
operation on a mutex must be carried out by the same thread that locked
You could use condition variables to achieve what you want. It would
also be wise to read up a little more on threading, and in particular
pthreads (which GThreads mimic).
] [Thread Prev