请教POSIX线程编程的问题
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
sem_wait和sem_post是成对出现的.
要于保证在线程或者进程间互斥的读写"公共区"
sem_wait(&sem);
tem[counter]='f';
sem_post(&sem);