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...

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

php multiple action on submit
I have a form which says:

<form enctype='multipart/form-data' method='post' action='pr

mysql_real_escape_string making variable equal nothing
i post a form and i post the variable:
Code: $var = $_POST[variable];then i echo $var its what i

What is SAP Avatar ?
Hi All,

This G.Satish , my boss asked me to explore on SAP Avatar. I searced in internet

IDOC error
Hi, When i send IDOC from ECC system to MII there is no problem ECC side, i says message sent succe

multiple recipients + dbuser mail recall
Hello,

I am building a php login script.

When the user registers the script will send

Redistributing dependent dlls
Hai all ,

I have created an application in VC++ using VS2008 in a development machine which r

dropdown menu
Hello everbody,

I am php newbie.
I need to develop a program that once click the drop do

User input in to variable
Hi all,

I'm sure this is very easy but I'm having another brain freeze!

At the end of

Inserting a variable in a link
I have this code that I want to insert for my own variable but I have no idea how. This is what I wa

TabControl Inside ListView Not Editing
Hello everybodyI have a ListView on my page. Inside the ListView I put a TabControl, cuz I want to p

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