[Ace-users] [ace-users] Problem with ACE_Thread_Semaphore

Johnny Willemsen jwillemsen at remedy.nl
Tue Dec 18 13:21:54 CST 2007


Hi,

This could also be a problem with the autoconf build, we do consider
autoconf experimental.

Regards,


Johnny Willemsen
Remedy IT
Postbus 101
2650 AC  Berkel en Rodenrijs
The Netherlands
www.theaceorb.nl / www.remedy.nl  

*** Integrated compile and test statistics see
http://scoreboard.theaceorb.nl ***
*** Commercial service and support for ACE/TAO/CIAO             ***
*** See http://www.theaceorb.nl/en/support.html                 ***


"Douglas C. Schmidt" <schmidt at dre.vanderbilt.edu> wrote in message
news:<mailman.3199.1197997407.5286.ace-users at mail.cse.wustl.edu>...
> 
> Hi Jonas,
> 
> >     ACE VERSION: 5.6.1
> 
> Thanks for using the PRF.
> 
> >     HOST MACHINE and OPERATING SYSTEM:
> > P4 with Fedora Core 7
> > 
> >     TARGET MACHINE and OPERATING SYSTEM, if different from HOST:
> >     COMPILER NAME AND VERSION (AND PATCHLEVEL):
> > 
> >     THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-
> >     specific file, simply state which one]:
> > Using rpm for FC7 downloaded from
http://dist.bonsai.com/ken/ace_tao_rpm/index.html
> > 
> >     THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you
> >     use a link to a platform-specific file, simply state which one
> >     (unless this isn't used in this case, e.g., with Microsoft Visual
> >     C++)]:
> > 
> >     CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
> >     (used by MPC when you generate your own makefiles):
> > 
> >     AREA/CLASS/EXAMPLE AFFECTED:
> > [What example failed?  What module failed to compile?]
> > 
> >     DOES THE PROBLEM AFFECT:
> >         COMPILATION? No
> >         LINKING? No
> >         EXECUTION? Yes
> > 
> >     SYNOPSIS:
> > Problem sync threads with ACE_Thread_Semaphore
> > 
> >     DESCRIPTION:
> > A simple testprogram (see below) fails to sync two thread using
ACE_Thread_Semaphore. The program creates a
> > ACE_Thread_Semaphore which initially is locked. The main-thread creates
a new thread and when waits for this thread by
> > calling acquire() on the semaphore. The newly created thread starts by
sleeping for a while and then calls release() on the
> > semaphore.
> > 
> > When the main-thread reaches the semSync.acquire() is blocks as
expected. Later when the new thread continue after initial
> > sleep is calls semSync.release() is also blocks. This is not expected.
Both threads blocks and the program hangs...
> 
> I tweaked your test a bit to print out when the main thread exits.  I
> then tried running your test on Linux with 5.6.2.  Here's the output I
> got:
> 
> % ./Semaphore_Test
> main() - about to create thread...
> main() - waiting for thread to start loop...
> runThread() sleeping...
> runThread() about to release...
> runThread() sleeping...
> main() - waiting for thread to stop...
> runThread() sleeping...
> runThread() sleeping...
> runThread() sleeping...
> runThread() sleeping...
> main() - shutting down...
> %
> 
> This appears to run fine.  Perhaps there's something odd with the
> underlying OS semaphore implementation on Fedora Core 7?
> 
> Thanks,
> 
>         Doug
> 
> >     REPEAT BY:
> > #include "ace/OS_NS_unistd.h"
> > #include "ace/Thread.h"
> > #include <ace/Thread_Semaphore.h>
> > 
> > #include <iostream>
> > 
> > ACE_Thread_Semaphore semSync(0);
> > 
> > ACE_THR_FUNC_RETURN runThread(void* /*param*/)
> > {
> >    std::wcout << "runThread() sleeping..." << std::endl;
> >   
> >    ACE_OS::sleep(5);
> > 
> >    std::wcout << "runThread() about to release..." << std::endl;
> >    semSync.release();
> >   
> >    for(int i=0; i<5; ++i)
> >    {
> >       std::wcout << "runThread() sleeping..." << std::endl;
> >       ACE_OS::sleep(1);
> >    }
> > 
> >    semSync.release ();
> > }
> > 
> > int main(int, char**)
> > {
> >    std::wcout << "main() - about to create thread..." << std::endl;
> >    ACE_Thread::spawn(runThread);
> >   
> >    std::wcout << "main() - waiting for thread to start loop..." <<
std::endl;
> >    semSync.acquire();
> >   
> >    std::wcout << "main() - waiting for thread to stop..." << std::endl;
> > 
> >    semSync.acquire();
> >   
> >    return 0;
> > }
> > 
> > _______________________________________________
> > ace-users mailing list
> > ace-users at mail.cse.wustl.edu
> > http://mail.cse.wustl.edu/mailman/listinfo/ace-users
> 



More information about the Ace-users mailing list