更推荐使用:http://www.boost.org/doc/libs/1_56_0/doc/html/boost/lockfree/queue.html
#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]
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAC2CAIAAADsnLLfAAADdklEQVR4nO2d3ZGDMAyEqYuCPJNuKCFV0AzFcA+QwwaRSCLymszu22UY+E7xjxbJd93z+Xw8Hl2pfpjmVWPqvqw0zrnEB/TDNE9Dv/tUZG1UZI0RWWN0wrqsBPpFQL5+m/LHSe2QwJrGeZ6GYdSynly/fNx33fqbXF/9DqxpXO6alKxn16cxD2YG/kXW/O6WUOyuL35c95arkQ1kXeK4fv/9MLXNmoZpzpAbZi2mv/V2kqJYd1P/G2ENY62yZmX5oGodf3P9t1PLH9hjmxRZY0TWGJE1RiKrPZ8H+QLz3gj1BaZ8HugL3Pk8wBe483mAL3Dn8wBf4M7nAb7Anc9DfIFzrUH4gs6Yz9MXiCJrjMgaI7LG6N6sxeKuXcNR9YLyWZ9pcb4gl1wWPZDC6wVK1JwNUi/4H2eGUCDrBV13KSesWi8QCUys9eoF/49QjgNkveD1fO2QhdcLFPenLxBF1hiRNUZkjdHdWbOOv7Z9Qb5z6/bYNnyBBrYRX2B6BLKPyIiK9QXGNj2gL0ijcfaifEG/xcPLWscXeEA7jC/YtX5/nL/0BaLIGiOyxoisMbo3625x1+1goHqBeesG+gIjK9QXOFMiiC8oxqs+Fuh6gSXhZr2g0HtWwwQG1wtMDgHSR5QbA9YLvCJrjMgaI7LG6DdYl5VcuW1B+4j6YZqnSdXvgq4XLOmnptMBXS94PVfflYGqF2z52zXWeF+QN2VdZY0/X1Ak81fGQLAvEN5qK1ecBvqIvHGtXuPUsNIXiCJrjMgaI7LG6M6sx6Xd8KYIeb5A3bXfSh/Rh2egfcEqUziwfUSmoxDYeoExOwbWC2xBFVlr1QvscwHmCxxRAPkCU1DpC0SRNUZkjRFZY/QDrNsy3nQfkTkZAPoCey4I8wXejAjhC7Yk2TbQAL6grMD5+12q+ILd+2H16EX4grPv0sha73xBVjRy9pJVe5dhWcPpC0SRNUZkjRFZY3R3Vscajjt3nKdZDZ873iUZn9MjoC8Q0iVXnlXLF5Sptpu1Rr0g99vpQlx5vuBKLe7k0sp9RGm0zAfw+QLV3ekLRJE1RmSNEVljdHfWvGG36fMFRcaqSl9x9YJyX2/aFxQnIi1PgPURvQbaxd6ccF+wxTVZ/s4PqF6wG69ub1jj/xdkcG4fW8UXFG7AYA2AfUTqhJ6+QBRZY3Qj1j/sqw7ZRCmU4QAAAABJRU5ErkJggg==)