xref: /kernel/linux/linux-5.10/tools/lib/lockdep/tests/ABBA_2threads.c (revision 8c2ecf20)
  • Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /kernel/linux/linux-5.10/tools/lib/lockdep/tests/
1// SPDX-License-Identifier: GPL-2.0
2#include <stdio.h>
3#include <pthread.h>
4
5pthread_mutex_t a = PTHREAD_MUTEX_INITIALIZER;
6pthread_mutex_t b = PTHREAD_MUTEX_INITIALIZER;
7pthread_barrier_t bar;
8
9void *ba_lock(void *arg)
10{
11	int ret, i;
12
13	pthread_mutex_lock(&b);
14
15	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD)
16		pthread_barrier_destroy(&bar);
17
18	pthread_mutex_lock(&a);
19
20	pthread_mutex_unlock(&a);
21	pthread_mutex_unlock(&b);
22}
23
24int main(void)
25{
26	pthread_t t;
27
28	pthread_barrier_init(&bar, NULL, 2);
29
30	if (pthread_create(&t, NULL, ba_lock, NULL)) {
31		fprintf(stderr, "pthread_create() failed\n");
32		return 1;
33	}
34	pthread_mutex_lock(&a);
35
36	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD)
37		pthread_barrier_destroy(&bar);
38
39	pthread_mutex_lock(&b);
40
41	pthread_mutex_unlock(&b);
42	pthread_mutex_unlock(&a);
43
44	pthread_join(t, NULL);
45
46	return 0;
47}
48

Indexes created Thu Nov 07 10:32:03 CST 2024