- 176 名前:154 mailto:sage [2010/02/17(水) 22:41:42 ]
- 修正。引数渡す場所間違えて一スレッドしか動いていない。
#include "include/tbb/concurrent_queue.h" #pragma comment (lib, "tbb.lib") #include <process.h> #include <windows.h> #include <iostream> using namespace std; using namespace tbb; #define N 3 concurrent_queue<int> que; int s[N]; unsigned WINAPI fnc(void *n) { int x,num=(int)n; while(1) { if( !que.try_pop(x) ) { Sleep(100); continue; } if(x==-1){ cout<<"正常終了number:"<<num<<endl; return 0;} s[num]+=x;Sleep(rand()%50); }} int main() { HANDLE hd[N]; int n; for(n=0; n<N; n++) s[n]=0; for(n=0; n<N; n++) hd[n]=(HANDLE)_beginthreadex(NULL, 0, fnc, (void*)n, 0 ,NULL); for(n=0; n<=50; n++) que.push(n); for(n=0; n<N; n++) que.push(-1); WaitForMultipleObjects(N, hd, TRUE, INFINITE); int sum=0; for(n=0; n<N; n++) {cout<< "スレッド"<<n <<"の合計 "<<s[n]<<endl; sum+=s[n]; } cout<<"総和 "<<sum<<endl; getchar(); }
|

|