...

Text file src/cmd/cgo/internal/test/cthread_windows.c

Documentation: cmd/cgo/internal/test

     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#define WIN32_LEAN_AND_MEAN
     6#include <windows.h>
     7#include <process.h>
     8#include "_cgo_export.h"
     9
    10__stdcall
    11static unsigned int
    12addThread(void *p)
    13{
    14	int i, max;
    15	
    16	max = *(int*)p;
    17	for(i=0; i<max; i++)
    18		Add(i);
    19	return 0;
    20}
    21
    22void
    23doAdd(int max, int nthread)
    24{
    25	enum { MaxThread = 20 };
    26	int i;
    27	uintptr_t thread_id[MaxThread];
    28	
    29	if(nthread > MaxThread)
    30		nthread = MaxThread;
    31	for(i=0; i<nthread; i++)
    32		thread_id[i] = _beginthreadex(0, 0, addThread, &max, 0, 0);
    33	for(i=0; i<nthread; i++) {
    34		WaitForSingleObject((HANDLE)thread_id[i], INFINITE);
    35		CloseHandle((HANDLE)thread_id[i]);
    36	}
    37}
    38
    39__stdcall
    40static unsigned int
    41goDummyCallbackThread(void* p)
    42{
    43	int i, max;
    44
    45	max = *(int*)p;
    46	for(i=0; i<max; i++)
    47		goDummy();
    48	return 0;
    49}
    50
    51int
    52callGoInCThread(int max)
    53{
    54	uintptr_t thread_id;
    55	thread_id = _beginthreadex(0, 0, goDummyCallbackThread, &max, 0, 0);
    56	WaitForSingleObject((HANDLE)thread_id, INFINITE);
    57	CloseHandle((HANDLE)thread_id);
    58	return max;
    59}

View as plain text