summaryrefslogtreecommitdiff
path: root/src/runtime/testdata/testprogcgo/bindm.c
blob: 815d8a75f26f42647153b313297154e3757f00b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !plan9 && !windows

#include <stdint.h>
#include <pthread.h>
#include <unistd.h>
#include "_cgo_export.h"

#define CTHREADS 2
#define CHECKCALLS 100

static void* checkBindMThread(void* thread) {
	int i;
	for (i = 0; i < CHECKCALLS; i++) {
		GoCheckBindM((uintptr_t)thread);
		usleep(1);
	}
	return NULL;
}

void CheckBindM() {
	int i;
	pthread_t s[CTHREADS];

	for (i = 0; i < CTHREADS; i++) {
		pthread_create(&s[i], NULL, checkBindMThread, &s[i]);
	}
	for (i = 0; i < CTHREADS; i++) {
		pthread_join(s[i], NULL);
	}
}