作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想打印像1,2,3,1,2,3这样的序列...但是下面的代码不是按这个顺序打印的。我无法理解我在使用信号量时出错的地方。请帮助我理解我在这段代码中犯的错误,以便我可以修复它。
#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>
#include <unistd.h>
#define MAX_NUM 50
sem_t sem1, sem2, sem3;
void *f1(void*)
{
sem_wait(&sem1);
for(int i=1; i<=MAX_NUM; i++)
{
printf("\nF1(): %d", 1);
sem_post(&sem2);
}
}
void* f2(void*)
{
sem_wait(&sem2);
for(int i=1; i<=MAX_NUM; i++)
{
printf("\nF2(): %d", 2);
sem_post(&sem3);
}
}
void* f3(void*)
{
sem_wait(&sem3);
for(int i=1; i<=MAX_NUM; i++)
{
printf("\nF3(): %d", 3);
sem_post(&sem1);
}
}
int main()
{
pthread_t p1, p2, p3;
sem_init(&sem1, 0, 1);
sem_init(&sem2, 0, 1);
sem_init(&sem3, 0, 1);
pthread_create(&p1, NULL, f1, (void*)NULL);
pthread_create(&p2, NULL, f2, (void*)NULL);
pthread_create(&p3, NULL, f3, (void*)NULL);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
pthread_join(p3, NULL);
return 0;
}
最佳答案
您需要以不同于其他方式的方式初始化 sem1
,以便 F1
首先超越其初始 sem_wait
。
另请注意,一旦每个函数进入循环,它就不会再次调用 sem_wait
,这意味着您无法再控制打印顺序。
关于C代码pthread信号量程序,具有3个线程,按顺序打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045425/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!