如何在C中将线程分配给不同的内核?

时间:2018-11-29 15:50:47

标签: c pthreads

我创建了一个程序,该程序使用4个线程对8个数字进行加法运算,然后求结果的乘积。如何确保每个线程都使用单独的内核以获得最大性能。我是pthread的新手,所以我真的不知道如何正确使用它。请提供尽可能简单的答案。

我的代码:

Intent objIntent = new Intent(CurrentActivity.this, DestinationActivity.class);
Bitmap objbitmap; // your bitmap
ByteArrayOutputStream bstream = new ByteArrayOutputStream();
objbitmap.compress(Bitmap.CompressFormat.PNG, 80, bs);
objIntent.putExtra("bitmaparray", bstream.toByteArray());
startActivity(objIntent);

1 个答案:

答案 0 :(得分:1)

您没有,不想也一定不能(我不知道您是否可以做到)以如此低的水平管理硬件资源。对于您的OS而言,这是一项工作,对于标准库来说,这是一部分工作:它们已经过优化和标准化的测试。

我怀疑您可以做得更好。如果您说的是您是专业的硬件/ OS程序员,或者正在破坏数十年的工作:)。

还请考虑以下事实:如果您可以手动索引内核,则代码将不再具有可移植性,因为它取决于计算机的内核数量。

以另一种方式,即使拥有一个内核,多线程程序也应该工作(有时甚至更好)。一个示例是这样的情况,其中一个线程在一个事件发生之前什么都不做:您可以使一个线程进入“睡眠”状态,以便只有其他线程才能使用CPU;而只有一个线程进入“睡眠”状态。然后当事件发生时它将执行。在非多线程程序中,通常使用轮询,该轮询使用CPU资源无所作为。

@yano还说您在这种情况下不是真正的多线程程序,因为您正在创建线程,然后在启动其他线程之前等待pthread_join完成它。