首页 > 其他 > 详细

编程练习:使用变量控制多线程调用顺序

时间:2014-03-11 20:41:25      阅读:459      评论:0      收藏:0      [点我收藏+]
注:
和同事讨论一个多线程的问题,想到前几天看到的一个关于多线程编程的题目,比较简单。中午吃完饭,随手实现了一下,在这里分享给大家。

/* 
题目:
output "ABCABCABC": threadFunc_A just print "A", threadFunc_B just print "B", threadFunc_C just print "C".
*/


#include <pthread.h>
#include <iostream>
using namespace std;

bool is_A_ok = true;
bool is_B_ok = false;
bool is_C_ok = false;

static void* threadFunc_A(void* param)
{
    int i = 3;
    while(i > 0)
    {
        if(is_A_ok)
        {
           cout<<"A";
           --i;
           is_A_ok = false;
           is_B_ok = true;
        }
    }
    return NULL;
}

static void* threadFunc_B(void* param)
{
    int i = 3;
    while(i > 0)
    {
        if(is_B_ok)
        {
            cout<<"B";
            --i;
            is_B_ok = false;
            is_C_ok = true;
        }
    }
    return NULL;
}

static void* threadFunc_C(void* param)
{
    int i = 3;
    while(i > 0)
    {
        if(is_C_ok)
        {
            cout<<"C";
            --i;
            is_C_ok = false;
            is_A_ok = true;
        }
    }
 
    cout<<endl;
    return NULL;
}

int main(int argc, char *argv[])
{
    int s=0;
   
    pthread_t tA;
    s = pthread_create(&tA, NULL, &threadFunc_A, NULL);;
    if(s!=0)
    {
        cout<<"Error happend: pthread_create, A"<<endl;
        return EXIT_FAILURE;
    }
    pthread_t tB;
    s = pthread_create(&tB, NULL, &threadFunc_B, NULL);;
    if(s!=0)
    {
        cout<<"Error happend: pthread_create, B"<<endl;
        return EXIT_FAILURE;
    }
    pthread_t tC;
    s = pthread_create(&tC, NULL, &threadFunc_C, NULL);;
    if(s!=0)
    {
        cout<<"Error happend: pthread_create, C"<<endl;
        return EXIT_FAILURE;
    }
 
    pthread_join (tA, NULL);
    pthread_join (tB, NULL);
    pthread_join (tC, NULL);
    return EXIT_SUCCESS;
}

编译链接:
g++ Thread_test.cpp -lstdc++ -lpthread -o Thread_test

运行结果和期待的值相符:
ABCABC

当然,我们也可以编写Makefile来编译和链接,因为我们这里只有一个文件,可以简单编辑:
------------------------------------------------------------------------------------
Thread_test :
 g++ Thread_test.cpp -lstdc++ -lpthread -o Thread_test
.PYONY: clean
clean:
 -rm Thread_test.o Thread_test

如果你觉得这样不是写,不是太规范,也可以继续改进Makefile:
------------------------------------------------------------------------------------
objects = Thread_test.o
CPPUTEST_CPPFLAGS += -lstdc++
CPPUTEST_CPPFLAGS += -lpthread
Thread_test : $(objects)
 g++ $(objects) $(CPPUTEST_CPPFLAGS) -o Thread_test
$(objects) : Thread_test.cpp
.PYONY: clean
clean:
 -rm $(objects) Thread_test

注释:
由于编辑显示的原因,[Tab]字符这里仅仅显示为一个空格。Makefile中每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。

编程练习:使用变量控制多线程调用顺序,布布扣,bubuko.com

编程练习:使用变量控制多线程调用顺序

原文:http://blog.csdn.net/walle_love_eva/article/details/21010869

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!