how to use mutex

Paul Whitfield paulw at omnitronics.com.au
Wed Sep 2 02:50:06 UTC 2015


Hi Chan Kim,

The result code you are displaying in your debug output is 4, This is not 0, RTEMS_SUCCESSFUL.
So the call to obtain the semaphore has failed. 

That result code can be found in rtems/status.h 
The result code is RTEMS_INVALID_ID, so you have a programming error, you are not accessing the semaphore with a valid ID. 

Regards

Paul Whitfield. 



-----Original Message-----
From: users [mailto:users-bounces at rtems.org] On Behalf Of Chan Kim
Sent: Wednesday, 2 September 2015 10:28 AM
To: users at rtems.org
Subject: RE: how to use mutex


I tried it with semaphore
for init,
    rtems_attribute sem_attr;
    rtems_status_code status;
    sem_attr = RTEMS_INHERIT_PRIORITY | RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY;
    sem_name = rtems_build_name( 'S','0',' ',' ');
    status = rtems_semaphore_create( sem_name, 1, sem_attr, 0, &sem_id);
    printk("semaphore created status = %d\n", status);

to obtain, (read case, write thread the same)
    rtems_status_code status;
    status = rtems_semaphore_obtain( sem_id, RTEMS_WAIT, 0);
    printk("locked from read..status = %d\n", status);

to release (read case, write thread the same)
    printk("unlocking from read..\n");
    rtems_semaphore_release( sem_id);

I get result
...
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 0
unlocking from read..
locked from read..status = 4
unlocking from read..
locked from read..status = 4
unlocking from read..
locked from read..status = 4
unlocking from read..
locked from write.. status = 4
unlocking from write..
locked from write.. status = 4
unlocking from write..
locked from write.. status = 4
unlocking from write..
locked from read..status = 4
locked from write.. status = 4   <===== read locked it, but write entered it.

status code 4 is RTEMS_INVALID_ID meaning object ID is invalid. I don't know what's wrong.
can anyone tell me what's wrong?
Chan



보낸 사람 : "Chan Kim" <ckim at etri.re.kr>
보낸 날짜 : 2015-09-02 10:26:24 ( +09:00 )
받는 사람 : users at rtems.org <users at rtems.org> 참조 : 
제목 : how to use mutex

Hello, rtems users,

Please somebody help with with using mutex.
To avoid sync problem by simpling serializing read and write processing, I tried using mutex and found it's not working properly.

------------ the way I did it
pthread_mutexattr_t mutex_attr;
pthread_mutex_t rd_wr_mutex;

to initialize,
statusi = pthread_mutexattr_init( &mutex_attr ); printk("mutext attri init result = %x\n", statusi); pthread_mutex_init(&rd_wr_mutex, &mutex_attr); printk("mutext init result = %x\n", statusi);

to lock,
pthread_mutex_lock(&rd_wr_mutex); // rtems_mutex_t printk("locked from read..\n");

to unlock,
printk("unlocking from read..\n");
pthread_mutex_unlock(&rd_wr_mutex);

--------------
I see results (only mutex lock, unlock prints)

mutext attr init result = 0
mutext init result = 0
...
locked from read..
unlocking from read..
locked from write..
unlocking from write..
locked from write..
unlocking from write..
locked from write..
unlocking from write..
locked from read..
locked from write.. <===== ???


Print result shows teh write thread enters it when read thread has locked it. What's wrong with the way of my using mutex?
Hope someone clears it with some explanation.
Thanks,

regards,
Chan Kim
_______________________________________________
users mailing list
users at rtems.org
http://lists.rtems.org/mailman/listinfo/users
_______________________________________________
users mailing list
users at rtems.org
http://lists.rtems.org/mailman/listinfo/users


More information about the users mailing list