bart | eae1632 | 2012-08-24 17:57:44 +0000 | [diff] [blame] | 1 | #include <iostream> |
| 2 | #include <cerrno> |
| 3 | #include <cstring> |
| 4 | #include <pthread.h> |
| 5 | #include <semaphore.h> |
| 6 | |
| 7 | struct FailedOn |
| 8 | { |
| 9 | FailedOn(const char *f, int e) : func(f), eno(e) {} |
| 10 | std::string func; |
| 11 | int eno; |
| 12 | }; |
| 13 | |
| 14 | int main(void) |
| 15 | { |
| 16 | try { |
| 17 | sem_t mySemaphore; |
| 18 | if (sem_init(&mySemaphore, 0, 0) != 0) |
| 19 | throw FailedOn("sem_init", errno); |
| 20 | |
| 21 | std::cerr << "Calling sem_trywait\n"; |
| 22 | if (sem_trywait(&mySemaphore) != 0) { |
| 23 | if (errno != EAGAIN) |
| 24 | throw FailedOn("sem_trywait", errno); |
| 25 | |
| 26 | std::cerr << "Wait would have blocked" << std::endl; |
| 27 | } else { |
| 28 | std::cerr << "Wait succeeded" << std::endl; |
| 29 | } |
| 30 | |
| 31 | if (sem_destroy(&mySemaphore) != 0) |
| 32 | throw FailedOn("sem_destroy", errno); |
| 33 | |
| 34 | return 0; |
| 35 | } catch (FailedOn &e) { |
| 36 | std::cerr << e.func << " failed: " << strerror(e.eno) << std::endl; |
| 37 | } catch (...) { |
| 38 | std::cerr << "Unknown exception" << std::endl; |
| 39 | } |
| 40 | |
| 41 | return -1; |
| 42 | } |