MIT_6.828_2018_Homework:Barriers

地址:Barriers

这次作业的目的是实现线程间的同步。具体实现参考别人如下:

static void 
barrier()
{
  //bstate.round++;

	pthread_mutex_lock(&bstate.barrier_mutex );
  bstate.nthread++;
  if (bstate.nthread == nthread) {
	// 最后一个进程进入 执行 round++, 再唤醒其他进程。
	bstate.round++;
	bstate.nthread = 0;
	// 唤醒其他进程
    pthread_cond_broadcast(&bstate.barrier_cond);  
  } 
  else {
	  pthread_cond_wait( &bstate.barrier_cond, &bstate.barrier_mutex);
  }
  
  pthread_mutex_unlock(&bstate.barrier_mutex );
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于碰撞检测代码,你提供的条件判断语句有一些问题。假设 `m_bird.m_X` 表示小鸟的 X 坐标,`m_bird.m_Y` 表示小鸟的 Y 坐标,`m_bird.m_Rect` 表示小鸟的矩形范围,`m_barriers[i].m_X` 表示第 i 个障碍物的 X 坐标,`m_barriers[i].m_Y` 表示第 i 个障碍物的 Y 坐标,`m_barriers[i].m_Rect` 表示第 i 个障碍物的矩形范围。 你的条件判断语句存在以下问题: 1. 第一个条件判断中,比较 `m_bird.m_X + m_bird.m_Rect.width()` 是否大于等于 `m_barriers[i].m_X`,这可能会导致判断不准确。你可能需要将 `m_bird.m_X + m_bird.m_Rect.width()` 改为 `m_bird.m_X + m_bird.m_Rect.width() > m_barriers[i].m_X`。 2. 第二个条件判断中,比较 `m_bird.m_X` 是否小于等于 `m_barriers[i].m_Rect.width() + m_barriers[i].m_Rect.width()`,这也可能导致判断不准确。你可能需要将 `m_barriers[i].m_Rect.width() + m_barriers[i].m_Rect.width()` 改为 `m_barriers[i].m_X + m_barriers[i].m_Rect.width()`。 3. 第三个条件判断中,比较 `m_bird.m_Y + m_bird.m_Rect.height()` 是否大于等于 `m_barriers[i].m_Y`,同样可能导致判断不准确。你可能需要将 `m_bird.m_Y + m_bird.m_Rect.height()` 改为 `m_bird.m_Y + m_bird.m_Rect.height() > m_barriers[i].m_Y`。 4. 第四个条件判断中,比较 `m_bird.m_Y` 是否小于等于 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()`,同样可能导致判断不准确。你可能需要将 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()` 改为 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()`。 修正后的代码如下: ```cpp if (m_bird.m_X + m_bird.m_Rect.width() > m_barriers[i].m_X && m_bird.m_X < m_barriers[i].m_X + m_barriers[i].m_Rect.width() && m_bird.m_Y + m_bird.m_Rect.height() > m_barriers[i].m_Y && m_bird.m_Y < m_barriers[i].m_Y + m_barriers[i].m_Rect.height()) { return true; // 发生碰撞 } ``` 这样,当小鸟的矩形范围与障碍物的矩形范围发生重叠时,就会返回 `true`,表示发生了碰撞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值