pthreadプログラミング(1)


// 2013 01 23      13 16 41  

// tested libfunc
// -pthread_create @pthred.h
// -pthread_join @pthred.h
// -pthread_self @pthred.h
// -pthread_cancel @pthred.h

// typedef
// -pthread_t : unsigned long int @pthred.h


#include <pthread.h>
#include <stdio.h>

void* threadfn( void *data )
{
	int i;
	for( i = 0; i < 100; i++ )
	{
		// use pthread_self to obtain ID of the calling thread
		printf( "thread-%#lx:	%d...hello,world!
", (unsigned long)pthread_self(), i ); } } void* threadfn_noreturn( void *data ) { long long ll = 0; while( 1 ) { // use pthread_self to obtain ID of the calling thread printf( "thread-%#lx: %lld...hello,world!
", (unsigned long)pthread_self(), ll++ ); } } // NOTE: by default the main thread exits with all other thread terminated. int main( void ) { pthread_t thread; // set attr:pthread_attr_t * to use default attributes and arg:void* to NULL if( pthread_create( & thread, NULL, threadfn, NULL ) ) { //error return -1; } // wait for thread to exit // NOTE: the first parameter is not a pointer type // set retval: void ** to NULL to ignore the exit status of the target thread pthread_join( thread, NULL ); // set attr:pthread_attr_t * to use default attributes and arg:void* to NULL if( pthread_create( & thread, NULL, threadfn_noreturn, NULL ) ) { //error return -1; } // now the main thread sleep for a while sleep( 1 ); // now the main thread wakeup to cancel the running thread // FIXME: here comes a problem, the last string is printed for twice as listed: // thread-0xb75b3b40: 13438...hello,world!thread-0xb75b3b40: 13438...hello,world! pthread_cancel( thread ); pthread_join( thread, NULL ); return 0; }