怎样在linux下创建三个线程连续打印ABC……?

[复制链接]
查看11 | 回复4 | 2021-1-29 01:24:08 | 显示全部楼层 |阅读模式
好吧我承认这是OS第一次实习作业如果只是在main里面创建三个不同的线程,每个线程分别打印ABC的话,那么打印出的ABC顺序无法保证……然后我问了助教GG他说用不着互斥锁【这是神马东西其实我也不知道啊喂!然后我用了一个2逼的做法,创建线程A,打印A,然后在线程A里创建线程B,打印B……
可是这样子不是失去线程的意义了么……?求教这个问题还有没有更好的解决方案。谢谢!
回复

使用道具 举报

千问 | 2021-1-29 01:24:08 | 显示全部楼层
不会耶..问了一下度娘...
有个思路是
有一个变量控制状态,用锁保护起来..然后三个线程去query,轮到自己的回合就打印..不过这种方法好像要用到互斥锁(这个是指http://baike.baidu.com/view/1461738.htm吗?)
希望楼主拿到答案以后share一下...
Nero (长安乱·不如归去) 在 ta 的帖子中提到:好吧我承认这是OS第一次实习作业如果只是在main里面创建三个不同的线程,每个线程分别打印ABC的话,那么打印出的ABC顺序无法保证……然后我问了助教GG他说用不着互斥锁【这是神马东西其实我也不知道啊喂!然后我用了一个2逼的做法,创建线程A,打印A,然后在线程A里创建线程B,打印B……可是这样子不是失去线程的意义了么……?求教这个问题还有没有更好的解决方案。谢谢!

回复

使用道具 举报

千问 | 2021-1-29 01:24:08 | 显示全部楼层
我当时是设置了一个全局变量。。。刚开始设置为某个值,x=1在三个线程里面分别判断,如果是1则打印A,同时修改x为2是2则打印B....这种二逼方法。。
Nero (长安乱·不如归去) 在 ta 的帖子中提到:好吧我承认这是OS第一次实习作业如果只是在main里面创建三个不同的线程,每个线程分别打印ABC的话,那么打印出的ABC顺序无法保证……然后我问了助教GG他说用不着互斥锁【这是神马东西其实我也不知道啊喂!然后我用了一个2逼的做法,创建线程A,打印A,然后在线程A里创建线程B,打印B……可是这样子不是失去线程的意义了么……?求教这个问题还有没有更好的解决方案。谢谢!

回复

使用道具 举报

千问 | 2021-1-29 01:24:08 | 显示全部楼层
同上
Sudo (ほしのこえ) 在 ta 的帖子中提到:我当时是设置了一个全局变量。。。刚开始设置为某个值,x=1在三个线程里面分别判断,如果是1则打印A,同时修改x为2是2则打印B....这种二逼方法。。

回复

使用道具 举报

千问 | 2021-1-29 01:24:08 | 显示全部楼层
那允许用啥同步机制呢?
这个显然需要用到某种同步机制。
比如说如果是用CSP的方式做就是用channel连接接三个线程,模仿tokenring。用原子操作也可以做,比如用CAS(实际就是相当于每个线程等各自的condvar,顺序唤醒)。
还可以继续优化,但是需要知道可以/想用啥方式来同步。
Nero (长安乱·不如归去) 在 ta 的帖子中提到:好吧我承认这是OS第一次实习作业如果只是在main里面创建三个不同的线程,每个线程分别打印ABC的话,那么打印出的ABC顺序无法保证……然后我问了助教GG他说用不着互斥锁【这是神马东西其实我也不知道啊喂!然后我用了一个2逼的做法,创建线程A,打印A,然后在线程A里创建线程B,打印B……可是这样子不是失去线程的意义了么……?求教这个问题还有没有更好的解决方案。谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行