当前位置: 技术问答>linux和unix
求教,用互斥量进行同步。。。
来源: 互联网 发布时间:2016-09-26
本文导语: #include #include #include #include #include #include void *thread_function(void *arg); pthread_mutex_t work_mutex; //包含线程库 #define WORK_SIZE 1024 char work_area[WORK_SIZE]; //公用的空间 int time_to_exit = 1; //用于控制...
#include
#include
#include
#include
#include
#include
void *thread_function(void *arg);
pthread_mutex_t work_mutex; //包含线程库
#define WORK_SIZE 1024
char work_area[WORK_SIZE]; //公用的空间
int time_to_exit = 1; //用于控制循环
int main()
{
int res;
pthread_t a_thread; //保存创建线程的返回值
void *thread_result; //接收线程结束的返回值
//创建并初始化互斥量
res = pthread_mutex_init(&work_mutex,NULL);
// 判断互斥量创建是否成功
if (res != 0) {
perror("初始化互斥量失败");
exit(EXIT_FAILURE);
}
//创建线程
res = pthread_create(&a_thread,NULL,thread_function,NULL);
//判断线程创建是否成功
if (res != 0) {
perror("线程创建失败");
exit(EXIT_FAILURE);
}
//锁定互斥量
pthread_mutex_lock(&work_mutex);
printf("请输入要传送的信息,输入'end'退出n");
//判断循环标志状态
while (time_to_exit) {
fgets(work_area,WORK_SIZE,stdin); //接收输入信息
pthread_mutex_unlock(&work_mutex); //解锁
while ( 1 ){
pthread_mutex_lock(&work_mutex); //锁定互斥量
if (work_area[0] != '') {
pthread_mutex_unlock(&work_mutex); //解锁
sleep(1);
}
else{
break;
}
}
}
pthread_mutex_unlock(&work_mutex); //解锁
printf("n等待线程结束...n");
res = pthread_join(a_thread,&thread_result); //等待线程结束
//判断结束线程是否有错误
if ( res != 0) {
perror("线程结束失败");
exit(EXIT_FAILURE);
}
printf("线程结束");
pthread_mutex_destory(&work_mutex); //清除互斥量
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg)
{
sleep(1);
pthread_mutex_lock(&work_mutex); //锁定信号量
while (strncmp("end",work_area,3) != 0) { //判断信息是否是end
printf("收到%d个字符n",strlen(work_area) - 1);
work_area[0] = ''; //将公共空间清除
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
while (work_area[0] == '、0') { //判断公共空间是否为空
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
}
}
time_to_exit = 0; //置循环标志为0
work_area[0] = '、0'; //清空公共空间
pthread_mutex_unlock(&work_mutex);
pthread_exit(0);
}
出现undefined reference to pthread_mutex_destory;
#include
#include
#include
#include
#include
void *thread_function(void *arg);
pthread_mutex_t work_mutex; //包含线程库
#define WORK_SIZE 1024
char work_area[WORK_SIZE]; //公用的空间
int time_to_exit = 1; //用于控制循环
int main()
{
int res;
pthread_t a_thread; //保存创建线程的返回值
void *thread_result; //接收线程结束的返回值
//创建并初始化互斥量
res = pthread_mutex_init(&work_mutex,NULL);
// 判断互斥量创建是否成功
if (res != 0) {
perror("初始化互斥量失败");
exit(EXIT_FAILURE);
}
//创建线程
res = pthread_create(&a_thread,NULL,thread_function,NULL);
//判断线程创建是否成功
if (res != 0) {
perror("线程创建失败");
exit(EXIT_FAILURE);
}
//锁定互斥量
pthread_mutex_lock(&work_mutex);
printf("请输入要传送的信息,输入'end'退出n");
//判断循环标志状态
while (time_to_exit) {
fgets(work_area,WORK_SIZE,stdin); //接收输入信息
pthread_mutex_unlock(&work_mutex); //解锁
while ( 1 ){
pthread_mutex_lock(&work_mutex); //锁定互斥量
if (work_area[0] != '') {
pthread_mutex_unlock(&work_mutex); //解锁
sleep(1);
}
else{
break;
}
}
}
pthread_mutex_unlock(&work_mutex); //解锁
printf("n等待线程结束...n");
res = pthread_join(a_thread,&thread_result); //等待线程结束
//判断结束线程是否有错误
if ( res != 0) {
perror("线程结束失败");
exit(EXIT_FAILURE);
}
printf("线程结束");
pthread_mutex_destory(&work_mutex); //清除互斥量
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg)
{
sleep(1);
pthread_mutex_lock(&work_mutex); //锁定信号量
while (strncmp("end",work_area,3) != 0) { //判断信息是否是end
printf("收到%d个字符n",strlen(work_area) - 1);
work_area[0] = ''; //将公共空间清除
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
while (work_area[0] == '、0') { //判断公共空间是否为空
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
}
}
time_to_exit = 0; //置循环标志为0
work_area[0] = '、0'; //清空公共空间
pthread_mutex_unlock(&work_mutex);
pthread_exit(0);
}
出现undefined reference to pthread_mutex_destory;
|
写错了,应该是pthread_mutex_destroy
|
你的链接选项是什么,有加-lphtread吗?
|
你自己看你的destroy是怎么写的.
|
有出现 undefined reference to pthread_mutex_destory;
这种错误提示的时候,自己检查下代码,结合man ,不就找到答案了,
这种错误提示的时候,自己检查下代码,结合man ,不就找到答案了,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。