mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-25 14:52:28 +00:00
Improve multithreading
This commit is contained in:
parent
d3167126aa
commit
30afd6ddbb
38 changed files with 752 additions and 174 deletions
|
@ -50,12 +50,10 @@ TEST(cosmo_once, test) {
|
|||
pthread_t th[N];
|
||||
x = y = 0;
|
||||
ASSERT_EQ(0, pthread_barrier_init(&b, 0, N));
|
||||
for (i = 0; i < N; ++i) {
|
||||
for (i = 0; i < N; ++i)
|
||||
ASSERT_EQ(0, pthread_create(th + i, 0, Worker, 0));
|
||||
}
|
||||
for (i = 0; i < N; ++i) {
|
||||
for (i = 0; i < N; ++i)
|
||||
ASSERT_EQ(0, pthread_join(th[i], 0));
|
||||
}
|
||||
ASSERT_EQ(N, atomic_load(&x));
|
||||
ASSERT_EQ(1, atomic_load(&y));
|
||||
ASSERT_EQ(0, pthread_barrier_destroy(&b));
|
||||
|
|
|
@ -528,18 +528,21 @@ TEST(mmap, sharedFileMapFork) {
|
|||
|
||||
int count;
|
||||
void *ptrs[N];
|
||||
size_t sizes[N];
|
||||
|
||||
void BenchMmapPrivate(void) {
|
||||
void *p;
|
||||
p = mmap(0, gransz * 10, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE,
|
||||
-1, 0);
|
||||
p = mmap(0, (sizes[count] = rand() % (pagesz * 500)), PROT_READ | PROT_WRITE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
if (p == MAP_FAILED)
|
||||
__builtin_trap();
|
||||
ptrs[count++] = p;
|
||||
ptrs[count] = p;
|
||||
++count;
|
||||
}
|
||||
|
||||
void BenchUnmap(void) {
|
||||
if (munmap(ptrs[--count], gransz * 10))
|
||||
--count;
|
||||
if (munmap(ptrs[count], sizes[count]))
|
||||
__builtin_trap();
|
||||
}
|
||||
|
||||
|
@ -557,7 +560,7 @@ void BenchBigMunmap(void) {
|
|||
__builtin_trap();
|
||||
}
|
||||
|
||||
BENCH(mmap, bench) {
|
||||
TEST(mmap, bench) {
|
||||
EZBENCH2("mmap", donothing, BenchMmapPrivate());
|
||||
EZBENCH2("munmap", donothing, BenchUnmap());
|
||||
// EZBENCH2("big mmap", donothing, BenchBigMmap());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue