is it possible to create 2 different semaphore for guarding same resource in VxWorks? -
please can me on issue. possible 2 different tasks create 2 different semaphore gaurding same critical resource in vxworks?
this should covered in vxworks documentation.
in general, should decouple creation of semaphore use of semaphore.
/**initialization code**/ sem_id semm; semm = semmcreate (...); ... taskspawn(task1...); taskspawn(task2...); ... /* task 1 code */ void task1() { ... semtake (semm, wait_forever); ...<task 1 critical section> semgive (semm); ... } /* task 2 code */ void task2() { ... semtake (semm, wait_forever); ...< task 2 critical section> semgive (semm); ... } in instance, semm global variable available both tasks. if offends you, vxworks 6.x can use semopen() api gives semaphores names. semopen in each task create/retrieve semaphore , it's id.
when mutex created, available first task semtake (be task 1 or task 2).
if need things happen in specific order need combination of mutex (for mutual exclusion) , synchronization (via binary semaphore example).
taking above example modifying bit make sure task2 runs once task1 has done something.
/**initialization code**/ sem_id semm; sem_id semsync; semm = semmcreate (...); semsync = sembcreate (...); ... void task1() { ... /* access shared structure */ semtake (semm, wait_forever); ...<task 1 critical section> semgive (semm); /* notify task 2 available */ semgive (semsync); ... } void task2() { ... /* wait task 1 let me know there */ semtake (semsync, wait_forever); /* access shared structure */ semtake (semm, wait_forever); ...< task 2 critical section> semgive (semm); ... }
Comments
Post a Comment