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

  • 相关阅读:
    关于Unity中调试C#的方法
    关于Unity的C#基础学习(二)
    关于代码命名规范
    关于Unity的C#基础学习(一)
    关于Unity的游戏的运行模式
    关于Unity的组件和作用
    关于Unity的开发模式
    关于Unity的坐标系
    关于Unity中场景视图的使用
    sql 追踪 神器
  • 原文地址:https://www.cnblogs.com/muahao/p/8033006.html
Copyright © 2011-2022 走看看