2013-08-12 21:10:21 +00:00
|
|
|
/*
|
|
|
|
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
|
|
|
Author: Leonardo de Moura
|
|
|
|
*/
|
2013-08-12 21:50:48 +00:00
|
|
|
#include <cstdlib>
|
2013-08-12 21:10:21 +00:00
|
|
|
#include <thread>
|
|
|
|
#include <iostream>
|
|
|
|
#include <mutex>
|
|
|
|
#include <vector>
|
2013-11-12 04:00:21 +00:00
|
|
|
#include "util/shared_mutex.h"
|
2013-08-12 21:10:21 +00:00
|
|
|
|
2013-09-10 20:50:35 +00:00
|
|
|
void foo() {
|
2013-08-12 21:10:21 +00:00
|
|
|
static thread_local std::vector<int> v(1024);
|
|
|
|
if (v.size() != 1024) {
|
|
|
|
std::cerr << "Error\n";
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void tst1() {
|
|
|
|
unsigned n = 5;
|
|
|
|
for (unsigned i = 0; i < n; i++) {
|
|
|
|
std::thread t([](){ foo(); });
|
|
|
|
t.join();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-11-12 04:00:21 +00:00
|
|
|
static void tst2() {
|
|
|
|
unsigned N = 10;
|
|
|
|
unsigned n = 1;
|
|
|
|
lean::shared_mutex mut;
|
|
|
|
std::vector<std::thread> threads;
|
|
|
|
for (unsigned i = 0; i < N; i++) {
|
|
|
|
threads.emplace_back([&]() {
|
|
|
|
unsigned sum = 0;
|
|
|
|
{
|
|
|
|
lean::shared_lock lock(mut);
|
|
|
|
for (unsigned i = 0; i < 1000000; i++)
|
|
|
|
sum += n;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
lean::unique_lock lock(mut);
|
|
|
|
std::cout << sum << "\n";
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
for (unsigned i = 0; i < N; i++)
|
|
|
|
threads[i].join();
|
|
|
|
}
|
|
|
|
|
2013-08-12 21:10:21 +00:00
|
|
|
int main() {
|
2013-11-12 04:00:21 +00:00
|
|
|
tst2(); return 0;
|
2013-08-12 21:10:21 +00:00
|
|
|
tst1();
|
|
|
|
}
|