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
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.
C and C++ are different language. Intel TBB is only a C++ library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With