修正。引数渡す場所間違えて一スレッドしか動いていない。
#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(); }