-/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2006-2023. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#define SIMGRID_S4U_SEMAPHORE_HPP
#include <simgrid/forward.h>
-#include <simgrid/simix.h>
-namespace simgrid {
-namespace s4u {
+namespace simgrid::s4u {
/** @brief A classical semaphore, but blocking in the simulation world
*
class XBT_PUBLIC Semaphore {
#ifndef DOXYGEN
friend kernel::activity::SemaphoreImpl;
- friend void kernel::activity::intrusive_ptr_release(kernel::activity::SemaphoreImpl* sem);
+ friend XBT_PUBLIC void kernel::activity::intrusive_ptr_release(kernel::activity::SemaphoreImpl* sem);
#endif
kernel::activity::SemaphoreImpl* const pimpl_;
- friend void intrusive_ptr_add_ref(const Semaphore* sem);
- friend void intrusive_ptr_release(const Semaphore* sem);
+ friend XBT_PUBLIC void intrusive_ptr_add_ref(const Semaphore* sem);
+ friend XBT_PUBLIC void intrusive_ptr_release(const Semaphore* sem);
explicit Semaphore(kernel::activity::SemaphoreImpl* sem) : pimpl_(sem) {}
~Semaphore() = default;
static SemaphorePtr create(unsigned int initial_capacity);
void acquire();
+ /** Returns true if there was a timeout */
bool acquire_timeout(double timeout);
void release();
int get_capacity() const;
bool would_block() const;
};
-} // namespace s4u
-} // namespace simgrid
+} // namespace simgrid::s4u
#endif /* SIMGRID_S4U_SEMAPHORE_HPP */