@@ -1,9 +0,0 @@
|
|||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
int llgoPthreadCreate(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) {
|
|
||||||
return pthread_create(thread, attr, start_routine, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
int llgoPthreadJoin(pthread_t thread, void **retval) {
|
|
||||||
return pthread_join(thread, retval);
|
|
||||||
}
|
|
||||||
@@ -35,56 +35,6 @@ type aThread struct {
|
|||||||
// Thread represents a POSIX thread.
|
// Thread represents a POSIX thread.
|
||||||
type Thread = *aThread
|
type Thread = *aThread
|
||||||
|
|
||||||
// The pthread_create() function starts a new thread in the calling
|
|
||||||
// process. The new thread starts execution by invoking
|
|
||||||
// start_routine(); arg is passed as the sole argument of
|
|
||||||
// start_routine().
|
|
||||||
//
|
|
||||||
// The new thread terminates in one of the following ways:
|
|
||||||
//
|
|
||||||
// - It calls pthread_exit(3), specifying an exit status value that
|
|
||||||
// is available to another thread in the same process that calls
|
|
||||||
// pthread_join(3).
|
|
||||||
//
|
|
||||||
// - It returns from start_routine(). This is equivalent to
|
|
||||||
// calling pthread_exit(3) with the value supplied in the return
|
|
||||||
// statement.
|
|
||||||
//
|
|
||||||
// - It is canceled (see pthread_cancel(3)).
|
|
||||||
//
|
|
||||||
// - Any of the threads in the process calls exit(3), or the main
|
|
||||||
// thread performs a return from main(). This causes the
|
|
||||||
// termination of all threads in the process.
|
|
||||||
//
|
|
||||||
// On success, pthread_create() returns 0; on error, it returns an
|
|
||||||
// error number, and the contents of *thread are undefined.
|
|
||||||
//
|
|
||||||
// See https://man7.org/linux/man-pages/man3/pthread_create.3.html
|
|
||||||
//
|
|
||||||
//go:linkname Create C.llgoPthreadCreate
|
|
||||||
func Create(pthread *Thread, attr *Attr, routine func(c.Pointer) c.Pointer, arg c.Pointer) c.Int
|
|
||||||
|
|
||||||
// The pthread_join() function waits for the thread specified by
|
|
||||||
// thread to terminate. If that thread has already terminated, then
|
|
||||||
// pthread_join() returns immediately. The thread specified by
|
|
||||||
// thread must be joinable.
|
|
||||||
//
|
|
||||||
// If retval is not NULL, then pthread_join() copies the exit status
|
|
||||||
// of the target thread (i.e., the value that the target thread
|
|
||||||
// supplied to pthread_exit(3)) into the location pointed to by
|
|
||||||
// retval. If the target thread was canceled, then PTHREAD_CANCELED
|
|
||||||
// is placed in the location pointed to by retval.
|
|
||||||
//
|
|
||||||
// If multiple threads simultaneously try to join with the same
|
|
||||||
// thread, the results are undefined. If the thread calling
|
|
||||||
// pthread_join() is canceled, then the target thread will remain
|
|
||||||
// joinable (i.e., it will not be detached).
|
|
||||||
//
|
|
||||||
// See https://man7.org/linux/man-pages/man3/pthread_join.3.html
|
|
||||||
//
|
|
||||||
//go:linkname Join C.llgoPthreadJoin
|
|
||||||
func Join(thread Thread, retval *c.Pointer) c.Int
|
|
||||||
|
|
||||||
// The pthread_exit() function terminates the calling thread and
|
// The pthread_exit() function terminates the calling thread and
|
||||||
// returns a value via retval that (if the thread is joinable) is
|
// returns a value via retval that (if the thread is joinable) is
|
||||||
// available to another thread in the same process that calls
|
// available to another thread in the same process that calls
|
||||||
|
|||||||
@@ -19,7 +19,63 @@
|
|||||||
|
|
||||||
package pthread
|
package pthread
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "unsafe"
|
||||||
|
|
||||||
|
"github.com/goplus/llgo/c"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LLGoFiles = "$(pkg-config --cflags bdw-gc): _pthread/pthread_gc.c"
|
LLGoFiles = "$(pkg-config --cflags bdw-gc): _wrap/pthread_gc.c"
|
||||||
LLGoPackage = "link: $(pkg-config --libs bdw-gc); -lgc"
|
LLGoPackage = "link: $(pkg-config --libs bdw-gc); -lgc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// The pthread_create() function starts a new thread in the calling
|
||||||
|
// process. The new thread starts execution by invoking
|
||||||
|
// start_routine(); arg is passed as the sole argument of
|
||||||
|
// start_routine().
|
||||||
|
//
|
||||||
|
// The new thread terminates in one of the following ways:
|
||||||
|
//
|
||||||
|
// - It calls pthread_exit(3), specifying an exit status value that
|
||||||
|
// is available to another thread in the same process that calls
|
||||||
|
// pthread_join(3).
|
||||||
|
//
|
||||||
|
// - It returns from start_routine(). This is equivalent to
|
||||||
|
// calling pthread_exit(3) with the value supplied in the return
|
||||||
|
// statement.
|
||||||
|
//
|
||||||
|
// - It is canceled (see pthread_cancel(3)).
|
||||||
|
//
|
||||||
|
// - Any of the threads in the process calls exit(3), or the main
|
||||||
|
// thread performs a return from main(). This causes the
|
||||||
|
// termination of all threads in the process.
|
||||||
|
//
|
||||||
|
// On success, pthread_create() returns 0; on error, it returns an
|
||||||
|
// error number, and the contents of *thread are undefined.
|
||||||
|
//
|
||||||
|
// See https://man7.org/linux/man-pages/man3/pthread_create.3.html
|
||||||
|
//
|
||||||
|
//go:linkname Create C.llgoPthreadCreate
|
||||||
|
func Create(pthread *Thread, attr *Attr, routine func(c.Pointer) c.Pointer, arg c.Pointer) c.Int
|
||||||
|
|
||||||
|
// The pthread_join() function waits for the thread specified by
|
||||||
|
// thread to terminate. If that thread has already terminated, then
|
||||||
|
// pthread_join() returns immediately. The thread specified by
|
||||||
|
// thread must be joinable.
|
||||||
|
//
|
||||||
|
// If retval is not NULL, then pthread_join() copies the exit status
|
||||||
|
// of the target thread (i.e., the value that the target thread
|
||||||
|
// supplied to pthread_exit(3)) into the location pointed to by
|
||||||
|
// retval. If the target thread was canceled, then PTHREAD_CANCELED
|
||||||
|
// is placed in the location pointed to by retval.
|
||||||
|
//
|
||||||
|
// If multiple threads simultaneously try to join with the same
|
||||||
|
// thread, the results are undefined. If the thread calling
|
||||||
|
// pthread_join() is canceled, then the target thread will remain
|
||||||
|
// joinable (i.e., it will not be detached).
|
||||||
|
//
|
||||||
|
// See https://man7.org/linux/man-pages/man3/pthread_join.3.html
|
||||||
|
//
|
||||||
|
//go:linkname Join C.llgoPthreadJoin
|
||||||
|
func Join(thread Thread, retval *c.Pointer) c.Int
|
||||||
|
|||||||
@@ -19,7 +19,62 @@
|
|||||||
|
|
||||||
package pthread
|
package pthread
|
||||||
|
|
||||||
const (
|
import (
|
||||||
LLGoFiles = "_pthread/pthread_nogc.c"
|
_ "unsafe"
|
||||||
LLGoPackage = "link"
|
|
||||||
|
"github.com/goplus/llgo/c"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LLGoPackage = "decl"
|
||||||
|
)
|
||||||
|
|
||||||
|
// The pthread_create() function starts a new thread in the calling
|
||||||
|
// process. The new thread starts execution by invoking
|
||||||
|
// start_routine(); arg is passed as the sole argument of
|
||||||
|
// start_routine().
|
||||||
|
//
|
||||||
|
// The new thread terminates in one of the following ways:
|
||||||
|
//
|
||||||
|
// - It calls pthread_exit(3), specifying an exit status value that
|
||||||
|
// is available to another thread in the same process that calls
|
||||||
|
// pthread_join(3).
|
||||||
|
//
|
||||||
|
// - It returns from start_routine(). This is equivalent to
|
||||||
|
// calling pthread_exit(3) with the value supplied in the return
|
||||||
|
// statement.
|
||||||
|
//
|
||||||
|
// - It is canceled (see pthread_cancel(3)).
|
||||||
|
//
|
||||||
|
// - Any of the threads in the process calls exit(3), or the main
|
||||||
|
// thread performs a return from main(). This causes the
|
||||||
|
// termination of all threads in the process.
|
||||||
|
//
|
||||||
|
// On success, pthread_create() returns 0; on error, it returns an
|
||||||
|
// error number, and the contents of *thread are undefined.
|
||||||
|
//
|
||||||
|
// See https://man7.org/linux/man-pages/man3/pthread_create.3.html
|
||||||
|
//
|
||||||
|
//go:linkname Create C.pthread_create
|
||||||
|
func Create(pthread *Thread, attr *Attr, routine func(c.Pointer) c.Pointer, arg c.Pointer) c.Int
|
||||||
|
|
||||||
|
// The pthread_join() function waits for the thread specified by
|
||||||
|
// thread to terminate. If that thread has already terminated, then
|
||||||
|
// pthread_join() returns immediately. The thread specified by
|
||||||
|
// thread must be joinable.
|
||||||
|
//
|
||||||
|
// If retval is not NULL, then pthread_join() copies the exit status
|
||||||
|
// of the target thread (i.e., the value that the target thread
|
||||||
|
// supplied to pthread_exit(3)) into the location pointed to by
|
||||||
|
// retval. If the target thread was canceled, then PTHREAD_CANCELED
|
||||||
|
// is placed in the location pointed to by retval.
|
||||||
|
//
|
||||||
|
// If multiple threads simultaneously try to join with the same
|
||||||
|
// thread, the results are undefined. If the thread calling
|
||||||
|
// pthread_join() is canceled, then the target thread will remain
|
||||||
|
// joinable (i.e., it will not be detached).
|
||||||
|
//
|
||||||
|
// See https://man7.org/linux/man-pages/man3/pthread_join.3.html
|
||||||
|
//
|
||||||
|
//go:linkname Join C.pthread_join
|
||||||
|
func Join(thread Thread, retval *c.Pointer) c.Int
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LLGoFiles = "_pthd/pthd.c"
|
LLGoFiles = "_wrap/pthd.c"
|
||||||
LLGoPackage = "link"
|
LLGoPackage = "link"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user