Application based on Pthreads is blocked under RTEMS

smc smc smc101979 at gmail.com
Fri Jul 4 13:37:25 UTC 2014


Hi, thanks all for your suggestions.

@Sebastian: the bsp is MPPA.
@Gedare: I cannot send the full code for debugging, because part of it uses
an proprietary API :/ About your comment, I commit a mistake transcribing
the code, it is not an assignment operator, it must be '=='.

Anyway, I am trying to use condition variables, despite of loosing some of
performance.

Regards.



2014-07-03 2:37 GMT+01:00 Gedare Bloom <gedare at rtems.org>:

>  I'll make one note below, but you should submit the entire
> self-contained example that shows the incorrect behavior if you want
> debugging help.
>
> On Wed, Jul 2, 2014 at 6:23 AM, smc smc <smc101979 at gmail.com> wrote:
> > Hi, I am new in RTEMS. I can't understand why the following threaded
> > application is not running on RTEMS as expected. Basically, it creates
> two
> > pthreads. One fills a buffer and the other one get an slice and submit
> it to
> > a cluster for processing (typical producer-consumer problem), something
> > like:
> >
> > void thread1()
> > {
> >   while(1)
> >   {
> >     for (i=0; i < size;i++)
> >     {
> >       if (buffer[i].st == -1)
> >       {
> >         pthread_mutex_lock(&mutex);
> >           genData(buffer[i]);
> >           buffer[i].st=0;            // ready to be consumed
> >         pthread_mutex_unlock(&mutex);
> >       }
> >     }
> >   }
> > }
> >
> > void thread2()
> > {
> >   while(1)
> >   {
> >     // n stores the slice start
> >     ready = false;
> >     while (!ready)                 // it gets a free slice
> >     {
> >       ready = true;
> >       for(i=n;i<n+slice;i++)
> >         if (buffer[i].st = -1)
> If you have this statement with an assignment operator, the
> while(!ready) loop should never terminate if slice > 0.
>
> >           ready = false;
> >      }
> >     // process the slice on cluster
> >    pthread_mutex_lock(&mutex);
> >       for (i=n;i<n+slice;i++)
> >         buffer[i].st = -1;       // now new data can be inserted on it
> >    pthread_mutex_unlock(&mutex);
> >   }
> > }
> >
> > It runs fine on a Linux/GNU system, but not in RTEMS. Under some
> > circumstances the program is blocked. It is like if thread2 was running
> > forever on the second while, and thread1 didn't fill the buffer. Do you
> have
> > any idea of what is happening? I would expect that each thread would run
> on
> > parallel on each core.
> >
> > Thanks.
> >
> > _______________________________________________
> > users mailing list
> > users at rtems.org
> > http://lists.rtems.org/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20140704/8137cb54/attachment-0002.html>


More information about the users mailing list