1 /* Copyright (c) 2009-2015. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
7 /* \file ThreadContext.hpp Context switching with native threads */
9 #ifndef SIMGRID_SIMIX_THREAD_CONTEXT_HPP
10 #define SIMGRID_SIMIX_THREAD_CONTEXT_HPP
12 #include <simgrid/simix.hpp>
19 class ThreadContextFactory;
21 class ThreadContext : public Context {
23 friend ThreadContextFactory;
24 ThreadContext(xbt_main_func_t code,
25 int argc, char **argv,
26 void_pfn_smxprocess_t cleanup_func,
27 smx_process_t process);
30 void suspend() override;
32 /** A portable thread */
33 xbt_os_thread_t thread_;
34 /** Semaphore used to schedule/yield the process */
36 /** Semaphore used to schedule/unschedule */
39 static void* wrapper(void *param);
42 class ThreadContextFactory : public ContextFactory {
44 ThreadContextFactory();
45 ~ThreadContextFactory();
46 virtual ThreadContext* create_context(
47 xbt_main_func_t, int, char **, void_pfn_smxprocess_t,
50 void run_all() override;
51 ThreadContext* self() override;