cstdatomic (c++0x std::atomic) / g++ 4.4


Posted on 16th Feb 2014 07:03 pm by admin

Hello,

I'm trying to use cstdatomic (std::atomic in the upcoming c++0x standard) in g++ 4.4, but it doesn't seems to work as expected and I would like to known if I missed something...

Did you know?Explore Trending and Topic pages for more stories like this.
My goal in the code below is just to test differents ways of concurrency (mutex vs atomic) : 4 threads increments counters in 3 ways.

1 - with std::mutex : works perfectly but slightly slow (lock / unlock)
2 - with g++ atomics "builtins" : works perfectly
3 - with std::atomic : doesn't works.


here is the code :

#include
#include
#include

int cnt_mutex = 0;
int cnt_builtins = 0;
std::atomic cnt_stdatomic = {0};
std::mutex smutex;

/* thread code */
void thrcode(int thrid)
{
/* counter local to thread */
int cnt_local;
for (cnt_local = 0; cnt_local < 10000000; cnt_local++)
{
/* c++0x fetchadd -> FAIL */
cnt_stdatomic.fetch_add(1);

/* g++ builtin fetchadd -> OK */
__sync_fetch_and_add(&cnt_builtins,1);

/* scoped std::mutex : OK */
{
std::unique_lock lockit(smutex);
cnt_mutex++;
};
};
printf("thread(%d) : cnt_local %dn",thrid,cnt_local);
};


int main() {
/* thread init */
std::thread m1(thrcode,1),m2(thrcode,2),m3(thrcode,3),m4(thrcode,4);

/* wait all thread */
m1.join(); m2.join(); m3.join(); m4.join();

/* display counters */
printf("end : cnt_mutex %d, cnt_builtins %d, cnt_stdatomic %dn",
cnt_mutex,cnt_builtins,(int)cnt_stdatomic);

};


compile with : g++ -std=c++0x mt.cpp -O3 -pthread && date && ./a.out && date

it give :
dimanche 4 octobre 2009, 19:10:28 (UTC+0200) (french time...)
thread(1) : cnt_local 10000000
thread(3) : cnt_local 10000000
thread(4) : cnt_local 10000000
thread(2) : cnt_local 10000000
end : cnt_mutex 40000000, cnt_builtins 40000000, cnt_stdatomic 39990400
dimanche 4 octobre 2009, 19:10:46 (UTC+0200)

cnt_stdatomic counter is incorrect... Someone could tell me where i'm wrong, did i miss something in code ?

(I'm using g++ version 4.4.1 Ubuntu 4.4.1-4ubuntu6)

Thanks !
No comments posted yet

Your Answer:

Login to answer
268 Like 14 Dislike
Previous forums Next forums
Other forums

Email "$"
Hello!!

Any PHP guy with a bit of a knowledge in Flash ?

When I send a JPEG from flash

Pass sql into pl/sql and create RMAN duplicate script.
Hi,

I'm new to pl/sql and I'm trying to write a script that will generate some RMAN comma

The IE or FF detector
Hello Friends,

Problem of today ( we seek for php help ) as following ,

we know all th

Select Rows as Columns..
is there a way to select COLUMN_NAME from user_tab_columns where table_name='TABLENAME';
and ha

Multi image upload
I have a gallery to build and want to build a dynamic upload form to allow for $var number of fields

Auto-populating dropdowns and multiple forms.
Here's what I have so far:

First drop down = select a state (works)
This populates the sec

Displaying different page content, depending on the logged in user.
Hi all, I am new to ASP.net (and web development in general), and have a question about how I can di

use an array from 1 class in a second class
I have a class that adds data to an array

Then I have a second class and I need to check if t

How do I use a global footer..?
If my index.php has a bole bunch of if functions and exit's in them

Cloud Computing?
Hello,

I was wondering if anyone could help explain this term to me. I'm starting to hear it

Sign up to write
Sign up now if you have flare of writing..
Login   |   Register
Follow Us
Indyaspeak @ Facebook Indyaspeak @ Twitter Indyaspeak @ Pinterest RSS



Play Free Quiz and Win Cash