所有
我有一个关于pthread_cond_wait()的问题.简而言之,我在一个进程中创建两个POSIX线程,如果我执行以下代码,为什么cpu利用率已满?
我对它进行实验,如果我在bool isNodeConnect3之前删除注释标记,程序似乎没有问题,CPU利用率几乎为0%,换句话说,theads将进入睡眠状态并且不花费CPU资源,这就是我的意思想.
这是一个数据识别问题吗?也许,但我不这么认为,因为我用"#pragma pack(push,1)... #pragma(pop)括起我的结构"你能给我一些建议吗?
环境主机操作系统是win7/intel 64位,客户操作系统是ubuntu 10.04LTS给客户操作系统提供"处理器核心数:4"以下是我的测试代码,你可以用
gcc -o program1 program1.c 构建和运行它- pthread && ./program1获取CPU利用率为25%.结果取决于您的设置.
非常感谢.
码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>
#include <stdbool.h>
#pragma pack(push,1)
struct BUFF_TX{
pthread_mutex_t mutex_lock;
pthread_cond_t more;
};
struct AtreeNode{
struct BUFF_TX buff_tx;
bool isNodeConnect;
bool isNodeConnect1;
bool isNodeConnect2;
// bool isNodeConnect3; // important
pthread_t thrd_tx;
};
struct AtreeNode treeNode[2];
int tmp[2];
#pragma (pop)
void Thread_TX(int *nodeIdx) …
Run Code Online (Sandbox Code Playgroud)