diff options
Diffstat (limited to 'helgrind/tests/.svn/text-base/tc24_nonzero_sem.c.svn-base')
-rw-r--r-- | helgrind/tests/.svn/text-base/tc24_nonzero_sem.c.svn-base | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/helgrind/tests/.svn/text-base/tc24_nonzero_sem.c.svn-base b/helgrind/tests/.svn/text-base/tc24_nonzero_sem.c.svn-base new file mode 100644 index 0000000..01c23e8 --- /dev/null +++ b/helgrind/tests/.svn/text-base/tc24_nonzero_sem.c.svn-base @@ -0,0 +1,41 @@ + +/* Check that Helgrind does not complain about semaphores with a + nonzero initial value, when said semaphores are correctly used. + Also useful for generating VCG of simple semaphore activity, for + inspection. */ + +#include <pthread.h> +#include <semaphore.h> +#include <assert.h> + +#define N_THREADS 3 + +void* child_fn ( void* semV ) +{ + int r; + sem_t* sem = (sem_t*)semV; + r= sem_wait(sem); assert(!r); + return NULL; +} + +int main ( void ) +{ + int r, i; + sem_t sem; + pthread_t child[N_THREADS]; + + r= sem_init(&sem, 0, N_THREADS); assert(!r); + + for (i = 0; i < N_THREADS; i++) { + r= pthread_create( &child[i], NULL, child_fn, (void*)&sem ); + assert(!r); + } + + for (i = 0; i < N_THREADS; i++) { + r= pthread_join( child[i], NULL ); + assert(!r); + } + + sem_destroy(&sem); + return 0; +} |