github.com/bir3/gocompiler@v0.9.2202/src/cmd/cgo/internal/test/cthread_unix.c (about) 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 10 static void* 11 addThread(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 21 void 22 doAdd(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 36 static void* 37 goDummyCallbackThread(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 47 int 48 callGoInCThread(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 }