码迷,mamicode.com
首页 > 编程语言 > 详细

C+= concurrent_queue 线程安全测试

时间:2015-05-08 14:38:59      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

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

#define NUM_THREAD 10
class person {
public:
    person() {
    }
    person(int name, unsigned int thread_num){
        this->name = name;
        this->thread_num = thread_num;
    }

    void print() {
        printf("%u\t%u\n", thread_num, name);
    }
private:
    int name;
    unsigned int thread_num;
};



tbb::strict_ppl::concurrent_queue<person*> que;

void* consumer(void* arg) {
    cout << arg << endl;
    while(true) {
        if(que.empty()) {
            cout << . << flush;
            sleep(1);
        }
        person* p;
        if(que.try_pop(p)) {
            p->print();
        }
    }
}

void* producer(void* arg) {
    cout << arg << endl;
    unsigned int thread_num =(unsigned int)pthread_self();
    for(int i=0; i<10; i++) {
        person* p = new person(i, thread_num);
        que.push(p);
    }
}


int main()
{
    pthread_t tids_c[NUM_THREAD];
    for(int i=0; i<NUM_THREAD; i++) {
        int ret = pthread_create(&tids_c[i], NULL, consumer, NULL);
        if(ret != 0) {
            cout << "start consumer failed" << endl;
            return -1;
        }
    }
    
    pthread_t tids[NUM_THREAD];
    for(int i=0; i<NUM_THREAD; i++) {
        int ret = pthread_create(&tids[i], NULL, producer, NULL);
        if(ret != 0) {
            cout << "start produer failed" << endl;
            return -1;
        }
    }


   for(int i=0; i<NUM_THREAD; i++){
       pthread_join(tids[i], NULL);
       pthread_join(tids_c[i], NULL);
   }

   cout << "exit" << endl;
}

/* vim: set ts=4 sw=4 sts=4 tw=100 */
dic = {}
with open(log.txt) as f:
    while True:
        line = f.readline()
        if not line:
            break;
        line = line.strip()

        arr = line.split(\t)
        key = arr[1]

        if key not in dic:
            dic[key] = 1
        else:
            dic[key] += 1

    for key in dic:
        print key, dic[key]

技术分享

C+= concurrent_queue 线程安全测试

标签:

原文地址:http://www.cnblogs.com/i80386/p/4487441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!