How to use pthread_create && mutex?

1

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

void *thread_function(void *arg)
{
	int i;
	for (i=0; i<5; i++){
		printf("Thread says hi!\n");
		sleep(1);
	}
	return NULL;
}

int main(void)
{
	pthread_t mythread;

	if ( pthread_create( &mythread, NULL, thread_function, NULL) ){
		printf("error creating thread.\n");
		abort();
	}

	if ( pthread_join( mythread, NULL )){
		printf("error joining thread.");
		abort();
	}

	exit(0);
}
gcc -o pthread1 pthread1.c -lpthread

2

#cat thread2.c
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int myglobal;

void *thread_function(void *arg)
{
	int i,j;
	for (i=0; i<20; i++){
		i=myglobal;
		j=j+1;
		printf(".");
		fflush(stdout);
		sleep(1);
		myglobal=j;
	}
	return NULL;
}

int main(void)
{
	pthread_t mythread;
	int i;

	if (pthread_create(&mythread, NULL, thread_function, NULL)){
		printf("Error creating thread.");
		abort();
	}

	for (i=0; i<20; i++){
		myglobal=myglobal+1;
		printf("o");
		fflush(stdout);
		sleep(1);
	}

	if (pthread_join(mythread, NULL)){
		printf("Error joining.");
		abort();
	}

	printf("\nmyglobal equals %d\n ",myglobal);
	exit(0);
}

3. Use mutex

#cat thread3.c
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>

int myglobal;

pthread_mutex_t mymutex=PTHREAD_MUTEX_INITIALIZER;

void *thread_function(void *arg)
{
	int i,j;
	for (i=0; i<10; i++){
		pthread_mutex_lock(&mymutex);
		j=myglobal;
		j=j+1;
		printf(".");
		fflush(stdout);
		sleep(1);
		myglobal=j;
		pthread_mutex_unlock(&mymutex);
	}

	return NULL;
}

int main(void)
{
	pthread_t mythread;
	int i;
	if (pthread_create(&mythread, NULL, thread_function, NULL)){
		printf("Error creating function;");
		abort();
	}

	for (i=0; i<10; i++){
		pthread_mutex_lock(&mymutex);
		myglobal=myglobal+1;
		pthread_mutex_unlock(&mymutex);
		printf("o");
		fflush(stdout);
		sleep(1);
	}

	if (pthread_join(mythread, NULL)){
		printf("Error joining thread.");
		abort();
	}

	printf("myglobal equals %d\n",myglobal);
	exit(0);
}

REF

https://www.ibm.com/developerworks/cn/linux/thread/posix_thread2/index.html

posted @ 2017-12-13 15:13  苏小北1024  阅读(252)  评论(0编辑  收藏  举报