Sun 开源技术高级研讨班(青岛)收获分享(一)

上个月有幸参加了 Sun 开源技术高级研讨班(青岛)的活动,两天下来收获不小,稍微整理了一点资料,在这里同大家分享下。

第一天讲 Dtrace 和 OpenMP。


Sun 果然是一家技术超前的公司,通过 Solaris 上的 Dtrace,我们可以非常精确的跟踪用户进程,将系统当前状态掌握的了如指掌。
Solaris 中有几万个探针,有点类似于debug断点的概念,它们分布于不同位置;做开发时,我们可借助其找出性能瓶颈,进行优化。


下午的 OpenMP 让我更深入了解了多线程编程。
分享一个动手实验吧:
将下面的程序循环分解并打印出目前正在执行的线程 10分钟

环境要求:

1.Solaris10 或者 Opensolaris 环境

2.已经安装好SUN Studio express 11/08 以上版本

3.如果使用IPS系统需要安装的包: netbeans,netbeans-cpp,netbeans-full,netbeans-ide,netbeans-desktop,sunwlibc,sunwcpp,sunstudioexpress

#include <stdio.h>
int main()
{
	int i;
	for(i=0;i<10;i++)
		printf("hello,world\n");
	return 0;
}

 

步骤:

1)首先我们确定要把这个循环分解到几个线程,县城数目过多而单个线程的任务过少反而会降低程序执行的效率,在这里我们把这个循环分解成两个。(上限不要超过CPU的总CORE数)

2)加入指示性语句 #pragma omp parallel for 语句,并指示线程数 num_threads(2)

#include <stdio.h>
int main()
{
	int i;
	#pragma omp parallel for num_threads(2)
	for(i=0;i<10;i++)
		printf("hello,world\n");
	return 0;
}

 3)使用OpenMP的API omp_get_thread_num() 打印目前正在运行的线程号,记住包含omp.h头文件

#include <stdio.h>
#include <omp.h>
int main()
{
	int i;
	#pragma omp parallel for num_threads(2)
	for(i=0;i<10;i++){
		printf("hello,world,ID:%d\n",omp_get_thread_num());
		sleep(1);		//增加观察性
	}
	return 0;
}

 4)编译#cc -xopenmp -fast lab2o.d

 5)运行,观察结果

 

一点点敲完真累,改天把别的实验也扫描一下贴上来。

你可能感兴趣的:(多线程,编程,Solaris,sun,Netbeans)