Sorry I did not finish the thing and got posted accidentally
For example, I have two thread sharing a global shared memory variable as 
below. The variable shmPtr->status is protected with mutex lock in both the 
function. Though there is a sleep(1/2) between mutex lock inside "for loop" 
in the task1 function , I could not access the shmPtr->status in task2 when 
required and have to wait until "for loop" exit in the task1 function, this 
takes around 50 seconds to take control of shmPtr->status by the task2 
function.

I am wondering why the task1 function is not releasing the mutex lock even 
with an sleep(1/2).

thr_id1 = pthread_create ( &p_thread1, NULL, (void *)execution_task1, NULL 
);
thr_id2 = pthread_create ( &p_thread2, NULL, (void *)execution_task2, NULL 
);  

void execution_task1()
{
     for(int i = 0;i < 100;i++) 
     {
          //100 lines of application code running here
          pthread_mutex_lock(&lock);  
                shmPtr->status = 1;  //shared memory variable 
         pthread_mutex_unlock(&lock);
         sleep(1/2);
     }
}

void execution_task2()
{
           //100 lines of application code running here
          pthread_mutex_lock(&lock);  
                shmPtr->status = 0;  //shared memory variable
         pthread_mutex_unlock(&lock);
         sleep(1/2);
}

Regards,
NK
On Thursday, September 3, 2020 at 12:55:48 PM UTC+5:30 Niresh wrote:

> Hi,
>
> I am using beagle Bone Black with debian image. Could any please suggest 
> how to optimize the application code using pthread_mutex_lock. Let me 
> describe the solution I am looking at.
>
> For example, I have two thread sharing a global shared memory variable as 
> below
>
> thr_id1 = pthread_create ( &p_thread1, NULL, (void *)execution_task1, NULL 
> );
> thr_id2 = pthread_create ( &p_thread2, NULL, (void *)execution_task2, NULL 
> );  
>
> void execution_task1()
> {
>     
>      for(int i = 0;i < 100;i++) 
>      {
>           pthread_mutex_lock(&lock);  
>                 shmPtr->status = 1;
> pthread_mutex_unlock(&lock);
> sleep(1/2);
>      }
> }
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/1d7fc600-e5da-4fbc-b26a-fa1f0c3a3514n%40googlegroups.com.

Reply via email to