+#ifdef WIN32
+ if(!ReleaseSemaphore(priv->handle, 1, 0))
+ throw system_error("Semaphore::signal");
+#else
+ MutexLock mlock(priv->mutex);
+ if(priv->count<priv->limit)
+ ++priv->count;
+ if(int err = pthread_cond_signal(&priv->cond))
+ throw system_error("Semaphore::signal", err);
+#endif