void BasicTaskScheduler0::pauseTask() {
	fPauseTask = 1;
//	printf("wait for task pause: this %p\n", this);
	condWait();
	fPauseTask = 0;
//	printf("task already paused: this %p\n", this);
}
Exemple #2
0
epicsMutexLockStatus epicsMutexOsdLock(struct epicsMutexOSD * pmutex)
{
    pthread_t tid = pthread_self();
    int status;

    if (!pmutex || !tid) return epicsMutexLockError;
    status = mutexLock(&pmutex->lock);
    if (status == EINVAL) return epicsMutexLockError;
    checkStatusQuit(status, "pthread_mutex_lock", "epicsMutexOsdLock");

    while (pmutex->owned && !pthread_equal(pmutex->ownerTid, tid))
        condWait(&pmutex->waitToBeOwner, &pmutex->lock);
    pmutex->ownerTid = tid;
    pmutex->owned = 1;
    pmutex->count++;

    status = pthread_mutex_unlock(&pmutex->lock);
    checkStatusQuit(status, "pthread_mutex_unlock", "epicsMutexOsdLock");
    return epicsMutexLockOK;
}