Hi Guy, thanks for your reply. I should have debugged this better,
indeed I found the racy condition.
I should happen in a most rare and extreme case, but since it did, it
required it's treatment and solution.
Now problem is solved and everything works appropriately.
Thanks, Rafi.

-----Original Message-----
From: guy keren [mailto:[EMAIL PROTECTED] 
Sent: Monday, May 21, 2007 1:49 PM
To: Rafi Cohen
Cc: [EMAIL PROTECTED] Org. Il
Subject: Re: multithread problem


Rafi Cohen wrote:
> Hi, I'm asking for further assistance for yet another problem I
> encounter with my project, this time concerning multithreads.
> In order to explain my problem, I'll write a short example:
> main:
> pthread_mutex_lock(&mut);
> flag = 0;
> pthread_cond_broadcast(&cond);
> printf("after signal: flag=%d\n", flag);
> pthread_mutex_unlock(&mut);
> ........
> thread:
> pthread_mutex_lock(&mut);
> while (flag)
> {
> pthread_cond_wait(&cond, &mut);
> printf("after wait: flag=%d\n", flag);
> }
> pthread_mutex_unlock(&mut);


this code looks ok.

> Now, after signal I indeed see that flag is 0.
> Flag is assigned 1 in 2 other places in main, in both cases surrounded

> by lock and unlock of the same mutex.

this sounds bad.

> Wha happens, that after wait, flag is still 1 and the thread is stuck
in 
> the loop, and I feel helpless.

when the main thread has set flag to 0, sent a broadcast and unlocked 
the mutex, you are not guranteed which of the threads waiting on this 
mutex will wake up first and acquire the mutex.

it could be that main's code continues running, locks the mutex again 
and set flag to 1.

all this shows you've got a bad design. for instance - why does 'main' 
set the flag to 1? this is racy. what is te purpose of this flag? what 
are you trying to accomplish?

--guy



-- 
No virus found in this incoming message.
Checked by AVG Free Edition. 
Version: 7.5.467 / Virus Database: 269.7.6/813 - Release Date: 5/20/2007
7:54 AM



=================================================================
To unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]

Reply via email to