X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=tests%2Fbenchmark%2Ftest_perthreadlock_timing.c;h=ca2953d0d43fdd705f42db6b766f5226d4f39a09;hp=c9cc65f70736dc441fc7a13b19d9b064ac8ce227;hb=HEAD;hpb=3fa182868e25068413fdaa1bef290365e99ab246 diff --git a/tests/benchmark/test_perthreadlock_timing.c b/tests/benchmark/test_perthreadlock_timing.c index c9cc65f..7822275 100644 --- a/tests/benchmark/test_perthreadlock_timing.c +++ b/tests/benchmark/test_perthreadlock_timing.c @@ -1,23 +1,9 @@ +// SPDX-FileCopyrightText: 2009 Mathieu Desnoyers +// +// SPDX-License-Identifier: GPL-2.0-or-later + /* - * test_perthreadloc_timing.c - * * Per thread locks - test program - * - * Copyright February 2009 - Mathieu Desnoyers - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include @@ -28,11 +14,11 @@ #include #include #include -#include #include #include #include +#include #include "thread-id.h" @@ -67,11 +53,13 @@ static int num_write; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time; +static void *thr_reader(void *arg) { - int i, j; caa_cycles_t time1, time2; long tidx = (long)arg; + unsigned int i, j; + int ret; printf("thread_begin %s, tid %lu\n", "reader", urcu_get_thread_id()); @@ -80,9 +68,17 @@ void *thr_reader(void *arg) time1 = caa_get_cycles(); for (i = 0; i < OUTER_READ_LOOP; i++) { for (j = 0; j < INNER_READ_LOOP; j++) { - pthread_mutex_lock(&per_thread_lock[tidx].lock); - assert(test_array.a == 8); - pthread_mutex_unlock(&per_thread_lock[tidx].lock); + ret = pthread_mutex_lock(&per_thread_lock[tidx].lock); + if (ret) { + perror("Error in pthread mutex lock"); + exit(-1); + } + urcu_posix_assert(test_array.a == 8); + ret = pthread_mutex_unlock(&per_thread_lock[tidx].lock); + if (ret) { + perror("Error in pthread mutex unlock"); + exit(-1); + } } } time2 = caa_get_cycles(); @@ -96,11 +92,13 @@ void *thr_reader(void *arg) } +static void *thr_writer(void *arg) { - int i, j; - long tidx; caa_cycles_t time1, time2; + unsigned int i, j; + long tidx; + int ret; printf("thread_begin %s, tid %lu\n", "writer", urcu_get_thread_id()); @@ -110,11 +108,19 @@ void *thr_writer(void *arg) for (j = 0; j < INNER_WRITE_LOOP; j++) { time1 = caa_get_cycles(); for (tidx = 0; tidx < NR_READ; tidx++) { - pthread_mutex_lock(&per_thread_lock[tidx].lock); + ret = pthread_mutex_lock(&per_thread_lock[tidx].lock); + if (ret) { + perror("Error in pthread mutex lock"); + exit(-1); + } } test_array.a = 8; for (tidx = NR_READ - 1; tidx >= 0; tidx--) { - pthread_mutex_unlock(&per_thread_lock[tidx].lock); + ret = pthread_mutex_unlock(&per_thread_lock[tidx].lock); + if (ret) { + perror("Error in pthread mutex unlock"); + exit(-1); + } } time2 = caa_get_cycles(); writer_time[(unsigned long)arg] += time2 - time1;