/* Unnamed semaphores and pthreads. */ #include #include #include #include #include #include #include #include "nya/array.h" #define massert( cond, msg ) \ if( cond ) { \ perror( msg ); \ exit(-1); \ } char buf[] = "abcdefghijklmnopqrstuvwsyz"; sema_t sem; void *inv( void *data ) { int len = strlen(buf); while( 1 ) { sema_wait( &sem ); inverse(buf, len); } } void *rev( void* data ) { int len = strlen(buf); while( 1 ) { sema_wait( &sem ); reverse(buf, len); } } int main( int argc, char* argv[] ) { pthread_t inv_pthread, rev_pthread; massert(pthread_create( &inv_pthread, NULL, inv, NULL ), "pthread" ); massert(pthread_create( &rev_pthread, NULL, rev, NULL ), "pthread" ); massert(sema_init( &sem, 1, USYNC_THREAD, NULL), "sema_init" ); while(1) { puts(buf); sema_post( &sem ); sleep(1); } pthread_exit(NULL); /* Why NULL? */ return 0; }