如何使用互斥锁

时间:2014-05-24 13:38:25

标签: multithreading pthreads mutex

我应该将锁定和解锁互斥锁放在哪里以便线程交替打印?感谢:d

实现一个创建两个线程的程序。线程将打印其ID(pthread_self)10次然后停止。确保打印的ID始终交替(即A,B,A,B,...)

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

#define N 2
pthread_mutex_t mtx;
void* func (void* arg) {
    int i=0;
    int f=1;

    for(i=0; i<10; i++) {
        printf("%d%s%d\n",f ,":  ", (int)pthread_self());
        f++;
    }

    return NULL;
}

int main() {
    int i;
    pthread_t thr[N];
    pthread_mutex_init(&mtx, NULL);


    for(i=0; i<N; i++) {

        pthread_create(&thr[i], NULL, func, NULL);
    }

    for(i=0; i<N; i++) {
        pthread_join(thr[i], NULL);
    }
    pthread_mutex_destroy(&mtx);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果您想要可预测的有序输出A,B,A,B,A,B,最合适的工具是单个控制线程。

要用两个线程浪费,你可以定义一个名为&#34;转&#34;的共享变量。这表明轮到你打印的东西了。每个线程等待一个条件变量,直到&#34;转向&#34;变量等于自身。然后它执行顺序任务,设置&#34;转&#34;变量到另一个线程并发出信号。