...
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
6
7#include <pthread.h>
8#include "_cgo_export.h"
9
10static void*
11addThread(void *p)
12{
13 int i, max;
14
15 max = *(int*)p;
16 for(i=0; i<max; i++)
17 Add(i);
18 return 0;
19}
20
21void
22doAdd(int max, int nthread)
23{
24 enum { MaxThread = 20 };
25 int i;
26 pthread_t thread_id[MaxThread];
27
28 if(nthread > MaxThread)
29 nthread = MaxThread;
30 for(i=0; i<nthread; i++)
31 pthread_create(&thread_id[i], 0, addThread, &max);
32 for(i=0; i<nthread; i++)
33 pthread_join(thread_id[i], 0);
34}
35
36static void*
37goDummyCallbackThread(void* p)
38{
39 int i, max;
40
41 max = *(int*)p;
42 for(i=0; i<max; i++)
43 goDummy();
44 return NULL;
45}
46
47int
48callGoInCThread(int max)
49{
50 pthread_t thread;
51
52 if (pthread_create(&thread, NULL, goDummyCallbackThread, (void*)(&max)) != 0)
53 return -1;
54 if (pthread_join(thread, NULL) != 0)
55 return -1;
56
57 return max;
58}
View as plain text