- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有信号量的队列。在某些时候,所有对 sem_post()
的调用总是返回“无效参数”错误,尽管信号量本身是有效的
信号量是C++对象的私有(private)成员,永远不会被删除,也可以在gdb中查看。我在 sem_post()
之前添加了 sem_getvalue()
- 值读取正常,然后在 sem_post()
上失败。有什么问题吗?
CThreadQueue::CThreadQueue(int MaxSize) :
_MaxSize(MaxSize)
{
sem_init(&_TaskCount, 0, 0)
pthread_mutex_init(&_Mutex, 0);
pthread_create(&_Thread, NULL, CThreadQueue::StartThread, this);
}
CThreadQueue::~CThreadQueue()
{
pthread_kill(_Thread, SIGKILL);
sem_destroy(&_TaskCount);
}
int CThreadQueue::AddTask(CThreadTask Task)
{
pthread_mutex_lock(&_Mutex);
_Queue.push_back(TempTask);
sem_post(&_TaskCount)
pthread_mutex_unlock(&_Mutex);
return 0;
}
void *CThreadQueue::StartThread(void *Obj)
{
((CThreadQueue*)Obj)->RunThread();
return NULL;
}
//runs in a separate thread
void CThreadQueue::RunThread()
{
CThreadQueue::CTask Task;
while(1) {
sem_wait(&_TaskCount);
pthread_mutex_lock(&_Mutex);
Task = _Queue.front();
_Queue.pop_front();
pthread_mutex_unlock(&_Mutex);
if (Task.Callee != NULL)
Task.Callee->CallBackFunc(NULL, Task.CallParam);
}
}
最佳答案
有什么问题吗?任何数量的东西。其他东西可能会破坏信号量或覆盖用于存储它的内存或指向它的指针。另一种可能性是您调用 sem_post() 的次数过多,导致计数器溢出。代码示例会有所帮助。
关于linux - sem_post() 因有效信号量而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685284/
假设 10 个进程正在使用 sem_wait() 等待一个信号量。 第 11 个进程对该信号量调用 sem_post。 10 个进程中的哪个将进入关键块? 像随机吗?所有的进程都会被唤醒并争取实现一个
信号处理程序中对sem_post()的使用是否依赖未定义的行为? /* * excerpted from the 2017-09-15 Linux man page for sem_wait(3)
我正在尝试使用信号量编写一个小型 C 程序,但我遇到了这个我无法解决的问题。我总是在 sem_post 遇到段错误。这是我的服务器代码中主要方法的相关部分: sem_t * sem_query = N
我有一个带有信号量的队列。在某些时候,所有对 sem_post() 的调用总是返回“无效参数”错误,尽管信号量本身是有效的 信号量是C++对象的私有(private)成员,永远不会被删除,也可以在gd
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试在 Linux 上创建一个包装器,它控制一次允许执行多少个并发执行。为此,我使用了系统范围内的计数信号量。我创建信号量,执行 sem_wait(),启动子进程,然后在子进程终止时执行 sem
这个问题已经有答案了: why is the semaphore not working? (3 个回答) 已关闭 4 年前。 sem_post() 无法正常工作,既不增加信号量的值,也不阻止附加到该
我正在做我的项目,正确清理所有内容并将所有缓冲的日志消息保存到文件等是至关重要的。我正在从另一个线程调用退出,我正在考虑使用信号量等待在程序完全退出之前在主线程中进行清理。问题是,当我从使用 atex
我认为我的代码不会打印文本 oh why come here!\n 但确实如此。 system() 有什么“错误”吗?因为,当我删除它时,代码按我的要求运行,停止了。 #include #inclu
我想在我的 linux(ubuntu 发行版)中编辑 sem_post() 和 sem_wait() 函数。但是我找不到功能的位置。我假设它在内核的 semaphore.c 上,但我找不到。我的lin
我正在尝试在 Windows 8 机器上使用 Eclipse 和 ARM Sourcery Windows GCC C 构建示例代码。当我编译代码时:我收到此错误: Undefined referen
我有一段代码需要快速运行,现在我正在使用 pthread_mutex_lock/pthread_mutex_unlock 来同步线程,但我发现它对性能有一定的影响。我想知道,如果有人对此进行基准测试,
这是一个奇怪的问题。我先初始化sem并销毁它,然后我在一个线程中再次初始化它。然后,我无法再次唤醒它。代码是: #include #include #include #include #inc
在 linux 代码中,我记得听说 mutex_lock() 周围有一个完整的内存屏障。我想确定它是否也在 sem_xxx 附近。 最佳答案 权威答案在这里: http://pubs.opengrou
我试图在我拥有的一段Python代码中锁定多个变量,每个变量一个锁。使用 semaphore.h 中提供的 sem_wait、sem_post、sem_init 例程可以轻松地在 C 语言中锁定变量。
我是一名优秀的程序员,十分优秀!