zoukankan      html  css  js  c++  java
  • 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!
    ");
    		sleep(1);
    	}
    	return NULL;
    }
    
    int main(void)
    {
    	pthread_t mythread;
    
    	if ( pthread_create( &mythread, NULL, thread_function, NULL) ){
    		printf("error creating thread.
    ");
    		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("
    myglobal equals %d
     ",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
    ",myglobal);
    	exit(0);
    }
    

    REF

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

  • 相关阅读:
    2016-02-24 工作日记
    金字塔培训
    你找到自己的路了么?
    你是个成熟的职场人么?
    码农十年总结
    码农十年连载六
    码农十年连载五
    码农十年连载四
    码农十年连载三
    码农十年连载二
  • 原文地址:https://www.cnblogs.com/muahao/p/8033006.html
Copyright © 2011-2022 走看看