How to use pthread_create && mutex?

Posted timer_go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于How to use pthread_create && mutex?的主要内容,如果未能解决你的问题,请参考以下文章

How to use MJRefresh

How to Use SFTP ?

Learn how to use Latex.

How to use GITHUB to do source control

How to use GITHUB to do source control

How To Use the AWK language to Manipulate Text in Linux