using Intel TBB in C
c, c++, intel, tbb
Solution
hivert is right, C and C++ are different languages.
Try this:
#include<pthread.h>
#include<stdio.h>
#include<tbb/atomic.h>
#define NUM_OF_THREADS 16
tbb::atomic<int> counter;
void *simpleCounter(void *threadId)
{
int i;
for(i=0;i<256;i++)
{
counter.fetch_and_add(1);
}
printf("T%ld \t Counter %d\n", (long) threadId, (int)counter);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
counter=0;
pthread_t threadArray[NUM_OF_THREADS];
long i;
for(i=0;i<NUM_OF_THREADS;i++)
{
pthread_create(&threadArray[i], NULL, simpleCounter, (void *)i);
}
for(i=0;i<NUM_OF_THREADS;i++)
pthread_join(threadArray[i], nullptr);
}
Save it with .cpp extension (not required with g++). I modified the missing namespace tbb::atomic and I also included a join in the end, to wait all threads to finish before quitting main. It should compile now. Add -std=c++11 as a compiler option, or change nullptr to NULL.
Problem
I'm trying to use Intel TBB in C. All the documentation I get for TBB are targeted towards C++. Does TBB work with plain C? If yes how do I define an atomic integer. In the below code I tried using a template `atomic<int> counter` (I know this will not work in C). Is there a way to fix this? ``` #include<pthread.h> #include<stdio.h> #include<tbb/atomic.h> #define NUM_OF_THREADS 16 atomic<int> counter; void *simpleCounter(void *threadId) { int i; for(i=0;i<256;i++) { counter.fetch_and_add(1); } printf("T%ld \t Counter %d\n", (long) threadId, counter); pthread_exit(NULL); } int main(int argc, char *argv[]) { counter=0; pthread_t threadArray[NUM_OF_THREADS]; long i; for(i=0;i<NUM_OF_THREADS;i++) { pthread_create(&threadArray[i], NULL, simpleCounter, (void *)i); } pthread_exit(NULL); } ``` ``` -bash-4.1$ g++ simpleCounter.c -I$TBB_INCLUDE -Wl,-rpath,$TBB_LIBRARY_RELEASE -L$TBB_LIBRARY_RELEASE -ltbb simpleCounter.c:7: error: expected constructor, destructor, or type conversion before ‘<’ token simpleCounter.c: In function ‘void* simpleCounter(void*)’: simpleCounter.c:16: error: ‘counter’ was not declared in this scope simpleCounter.c:18: error: ‘counter’ was not declared in this scope simpleCounter.c: In function ‘int main(int, char**)’: simpleCounter.c:24: error: ‘counter’ was not declared in this scope ```