# include <iostream>
# include <thread>
# include <mutex>
# include <atomic>
using namespace std
;
std
::atomic
<int> var(0);
void add() {
int expect
= var
;
while (!atomic_compare_exchange_weak(&var
, &expect
, var
+ 1));
}
int main(int argc
, char *argv
[]) {
int count
= 2000;
std
::thread threads
[count
];
for (int i
= 0; i
< count
; ++i
) threads
[i
] = std
::thread(add
);
for (int i
= 0; i
< count
; ++i
) threads
[i
].join();
cout
<< var
<< endl
;
return 0;
}
# include <iostream>
# include <thread>
# include <mutex>
# include <atomic>
using namespace std
;
std
::atomic
<int> var(0);
void add() {
var
.fetch_add(1);
}
int main(int argc
, char *argv
[]) {
int count
= 2000;
std
::thread threads
[count
];
for (int i
= 0; i
< count
; ++i
) threads
[i
] = std
::thread(add
);
for (int i
= 0; i
< count
; ++i
) threads
[i
].join();
cout
<< var
<< endl
;
return 0;
}
# include <iostream>
# include <thread>
# include <mutex>
# include <atomic>
using namespace std
;
std
::mutex mtx
;
void add(int *var
) {
std
::lock_guard
<std
::mutex
> l(mtx
);
(*var
)++;
}
int main(int argc
, char *argv
[]) {
int count
= 2000;
std
::thread threads
[count
];
int *var
= new int [1];
for (int i
= 0; i
< count
; ++i
) threads
[i
] = std
::thread(add
, var
);
for (int i
= 0; i
< count
; ++i
) threads
[i
].join();
cout
<< *var
<< endl
;
return 0;
}
转载请注明原文地址: https://lol.8miu.com/read-6769.html