请教POSIX线程编程的问题

发布于 2022-07-22 12:00:50 字数 1176 浏览 8 评论 1

FC4
在学写线程的时候写了一个实验程序:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>

char tem[10]; //读写公共区
sem_t sem;
void* thread_fun(void*);

int main()
{
int counter=0;
pthread_t mythread;
sem_init(&sem,0,0);
pthread_create(&mythread,NULL,thread_fun,NULL);

while(counter<10) //往读写区里写10次'f'
{
tem[counter]='f';
counter++;
sem_post(&sem);
}
pthread_join(mythread,NULL); //等待子线程
sem_destroy(&sem);
exit(0);
}

void* thread_fun(void* arg) //子线程函数
{
int counter=0;
while(counter<10&&sem_wait(&sem)==0)
{
printf("%c",tem[counter]); //读出来显示
counter++;
//sem_wait(&sem);
}
pthread_exit(NULL);
}

编译时用的命令: cc -o sem -D_REENTRANT -g sem.c -lpthread
我用gdb调试能成功分出一个子线程,但是运行3次main函数的循环后,gdb告诉我,那个新启动的线程状态为zombie(僵死),然后当main函数执行完毕后,用ps -a查看我写的这个程序没有正常结束.
各位帮我看看是怎么会事情????

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贪恋 2022-07-22 21:00:43

sem_wait和sem_post是成对出现的.
要于保证在线程或者进程间互斥的读写"公共区"
sem_wait(&sem);
tem[counter]='f';
sem_post(&sem);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文