Changeset 9283830 in mainline for uspace/lib/cpp/include/impl/thread.hpp
- Timestamp:
- 2018-07-05T21:41:20Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7e7c1aac
- Parents:
- c4049e6
- git-author:
- Dzejrou <dzejrou@…> (2018-03-28 14:21:53)
- git-committer:
- Dzejrou <dzejrou@…> (2018-07-05 21:41:20)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/cpp/include/impl/thread.hpp
rc4049e6 r9283830 32 32 #include <chrono> 33 33 #include <internal/common.hpp> 34 #include <internal/thread.hpp> 34 35 #include <ostream> 35 36 36 37 namespace std 37 38 { 38 extern "C" {39 #include <fibril.h>40 #include <fibril_synch.h>41 }42 43 39 namespace aux 44 40 { … … 59 55 finished_{false}, detached_{false} 60 56 { 61 fibril_mutex_initialize(&join_mtx_);62 fibril_condvar_initialize(&join_cv_);57 aux::threading::mutex::init(join_mtx_); 58 aux::threading::condvar::init(join_cv_); 63 59 } 64 60 65 61 void join() 66 62 { 67 fibril_mutex_lock(&join_mtx_);63 aux::threading::mutex::lock(join_mtx_); 68 64 while (!finished_) 69 fibril_condvar_wait(&join_cv_, &join_mtx_);70 fibril_mutex_unlock(&join_mtx_);65 aux::threading::condvar::wait(join_cv_, join_mtx_); 66 aux::threading::mutex::unlock(join_mtx_); 71 67 } 72 68 … … 87 83 88 84 protected: 89 fibril_mutex_t join_mtx_;90 fibril_condvar_t join_cv_;85 aux::mutex_t join_mtx_; 86 aux::condvar_t join_cv_; 91 87 bool finished_; 92 88 bool detached_; … … 105 101 callable_(); 106 102 107 fibril_mutex_lock(&join_mtx_);103 aux::threading::mutex::lock(join_mtx_); 108 104 finished_ = true; 109 fibril_mutex_unlock(&join_mtx_);110 111 fibril_condvar_broadcast(&join_cv_);105 aux::threading::mutex::unlock(join_mtx_); 106 107 aux::threading::condvar::broadcast(join_cv_); 112 108 } 113 109 … … 126 122 class id; 127 123 128 using native_handle_type = fibril_t*;124 using native_handle_type = aux::thread_t*; 129 125 130 126 /** … … 150 146 joinable_wrapper_ = static_cast<aux::joinable_wrapper*>(callable_wrapper); 151 147 152 id_ = fibril_create(153 154 static_cast<void*>(callable_wrapper)148 id_ = aux::threading::thread::create( 149 aux::thread_main<decltype(callable_wrapper)>, 150 *callable_wrapper 155 151 ); 156 fibril_add_ready(id_); 152 153 aux::threading::thread::start(id_); 154 // TODO: fibrils are weird here, 2 returns with same thread ids 157 155 } 158 156 … … 182 180 183 181 private: 184 fid_t id_;182 aux::thread_t id_; 185 183 aux::joinable_wrapper* joinable_wrapper_{nullptr}; 186 184 … … 223 221 { 224 222 auto now = Clock::now(); 225 auto usecs = chrono::duration_cast<chrono::duration<typename Duration::rep, micro>>(abs_time - now); 226 227 fibril_usleep(usecs.count());223 224 auto time = aux::threading::time::convert(abs_time - now); 225 aux::threading::time::sleep(time); 228 226 } 229 227 … … 235 233 236 234 // TODO: timeouts? 237 auto usecs = chrono::duration_cast<chrono::duration<Rep, micro>>(rel_time);238 fibril_usleep(usecs.count());235 auto time = aux::threading::time::convert(rel_time); 236 aux::threading::time::sleep(time); 239 237 } 240 238 }
Note:
See TracChangeset
for help on using the changeset viewer.