Re: Using GAllocator in a multi-threaded environment



Hi Beni,

On Tue, 2003-03-11 at 14:54, Beni Serfaty wrote:
> I was happily using GQueue which seemed to be doing it's job right. When
> I applied another GQueue running from a different thread, I started
> getting sometime segmentation fault from the function _g_list_alloc - 
> (In the line 	  current_allocator->free_lists->data = list->next; )

	Well; the g_list allocator is thread safe; so this isn't likely tobe
the problem IMHO.

	You can get similar effects however by freeing the same g_list twice;
in two threads, glib can't protect you from that. So I suspect it's your
code that has some race in it. Of course - you can get the same effect
quite nicely in a single thread by g_list_freeing the same list twice so
... ;-)

> How do one work with GQueue in a multi-threaded environment: 
> (I want to use several GQueues or GLists, with different GAllocators,
> running in a multi-threaded environment). Since the current allocator is
> static in the lib code, is it even possible without locking? Is there
> some way to use a non-static allocator?

	It's thread safe; you just need to have your own locks around your own
data strutures to ensure that they are not poked by multiple threads
simultaneously.

	HTH,

		Michael.

-- 
 mmeeks gnu org  <><, Pseudo Engineer, itinerant idiot




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]