<div dir="ltr"><div dir="ltr" style="font-family:arial,sans-serif;font-size:13px">Hi, thanks all for your suggestions.<div><br></div><div>@Sebastian: the bsp is MPPA.</div><div>@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 '=='.</div>
<div><br></div><div>Anyway, I am trying to use condition variables, despite of loosing some of performance.</div><div><br></div><div>Regards.</div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
2014-07-03 2:37 GMT+01:00 Gedare Bloom <span dir="ltr"><<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 I'll make one note below, but you should submit the entire<br>
self-contained example that shows the incorrect behavior if you want<br>
debugging help.<br>
<div class=""><br>
On Wed, Jul 2, 2014 at 6:23 AM, smc smc <<a href="mailto:smc101979@gmail.com">smc101979@gmail.com</a>> wrote:<br>
> Hi, I am new in RTEMS. I can't understand why the following threaded<br>
> application is not running on RTEMS as expected. Basically, it creates two<br>
> pthreads. One fills a buffer and the other one get an slice and submit it to<br>
> a cluster for processing (typical producer-consumer problem), something<br>
> like:<br>
><br>
> void thread1()<br>
> {<br>
>   while(1)<br>
>   {<br>
>     for (i=0; i < size;i++)<br>
>     {<br>
>       if (buffer[i].st == -1)<br>
>       {<br>
>         pthread_mutex_lock(&mutex);<br>
>           genData(buffer[i]);<br>
>           buffer[i].st=0;            // ready to be consumed<br>
>         pthread_mutex_unlock(&mutex);<br>
>       }<br>
>     }<br>
>   }<br>
> }<br>
><br>
> void thread2()<br>
> {<br>
>   while(1)<br>
>   {<br>
>     // n stores the slice start<br>
>     ready = false;<br>
>     while (!ready)                 // it gets a free slice<br>
>     {<br>
>       ready = true;<br>
>       for(i=n;i<n+slice;i++)<br>
>         if (buffer[i].st = -1)<br>
</div>If you have this statement with an assignment operator, the<br>
while(!ready) loop should never terminate if slice > 0.<br>
<div class="im HOEnZb"><br>
>           ready = false;<br>
>      }<br>
>     // process the slice on cluster<br>
>    pthread_mutex_lock(&mutex);<br>
>       for (i=n;i<n+slice;i++)<br>
>         buffer[i].st = -1;       // now new data can be inserted on it<br>
>    pthread_mutex_unlock(&mutex);<br>
>   }<br>
> }<br>
><br>
> It runs fine on a Linux/GNU system, but not in RTEMS. Under some<br>
> circumstances the program is blocked. It is like if thread2 was running<br>
> forever on the second while, and thread1 didn't fill the buffer. Do you have<br>
> any idea of what is happening? I would expect that each thread would run on<br>
> parallel on each core.<br>
><br>
> Thanks.<br>
><br>
</div><div class="HOEnZb"><div class="h5">> _______________________________________________<br>
> users mailing list<br>
> <a href="mailto:users@rtems.org">users@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
</div></div></blockquote></div><br></div>