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

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -