Thread C/C++ vs Clojure vs Perl (20 answers)
Opened by tonewheel at 2014-05-26 21:49

murphy
 2014-05-27 22:29
#175787 #175787
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2014-05-27T19:33:19 Raubtier
[...]
Hast du das verlinkte Video mal angeschaut?
[...]

Ich bin bei der Arbeit und habe mir das aus Zeitmangel noch nicht angesehen, habe es aber vor.

Quote
[...]
Mutable heißt bitweise const oder thread-safe.

Ich kenne mich definitiv nicht gut mit C++11 aus, aber diese Aussage klingt völlig falsch und das glatte Gegenteil davon müsste nach meinem Dafürhalten stimmen!

Hier mal ein durchgespieltes Beispiel zum "Beweis":
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ cat foo.cpp 
#include <cstdio>

class foo {
private:
mutable int dawut;
public:
foo() : dawut(42) {
}

void showme() const {
printf("foo.dawut = %d\n", dawut);
}

void bar() const {
dawut = 23;
}
};

int main() {
const foo foo;
foo.showme();
foo.bar();
foo.showme();
return 0;
}

$ gcc -std=c++11 -O2 -Wall foo.cpp -o foo
$ ./foo
foo.dawut = 42
foo.dawut = 23


Ganz offensichtlich ist es also in der verbreitetsten Implementation eines C++11 Systemes der Welt möglich, in einer const Methode in einer const Instanz einer Klasse ein Feld, welches mutable deklariert ist, zu verändern. Daraus folgt, dass const alleine keine Garantie für Threadsicherheit geben kann!
When C++ is your hammer, every problem looks like your thumb.

View full thread C/C++ vs Clojure vs Perl