详解Unified Parallel C中的指针类型,指针算法

UPC 语言中的指针类型

UPC 语言把数据分为共享类型和私有类型。一个指针所指向的数据可能为共享类型或者私有类型,并且指针本身也可以是共享类型或者私有类型。因此 UPC 语言中的指针共有以下四种类型,参见图 1

指向私有数据私有类型指针 指向">共享数据私有类型指针 指向私有数据共享类型指针 指向共享数据共享类型指针

图 1. UPC 语言指针类型

指向私有数据私有类型指针

如图 1 中的 p1 指针,是一个指向私有数据的私有类型指针。该指针类似于 C 语言中的普通的指针。当声明一个这样的指针时,UPC 语言会在每个线程的私有内存中为该指针的副本分配内存,即每个线程拥有该指针的一个副本。 该指针可以用来访问一个线程的私有数据。例如,下面的语句声明了一个指向私有数据私有类型指针:

int *p1;

清单 1. 指向私有数据私有类型指针

# include <upc.h> // 假定由 2 个线程来运行该程序 # include <stdio.h> # include <<stdlib.h> int a=-1; void main() { int *p1; if(MYTHREAD == 1) { // p1 指向动态分配的私有内存。 p1=malloc(1*sizeof(int)); *p1=1; } else { // p1 指向变量 a. p1=&a; } printf("Th=%d,*p1=%d\n",MYTHREAD,*p1); }

图 2. 清单 1 程序内存视图

图 3:清单 1 程序输出

时间: 2025-01-27 13:43:02

详解Unified Parallel C中的指针类型,指针算法的相关文章

SharePoint开发详解:一个Feature中使用SPGridView的几个Tips

根据上面一篇随笔所介绍的PC购买流程的项目,在项目中,需要有一个生成 订单的功能,能够使得Admin很方便的在获得批准的申请中选取一些来生成订单 ,要求界面操作简单明了,大概的效果图如下: 开发详解:一个Feature中使用SPGridView的几个Tips-"> 点击checkbox,自动计算当前订单的总价值,点击按钮,生成订单. 有此想到了用SPGridView这个现成的控件来完成,以前也用过这个控件,其 实和GridView没什么大区别.这里就简单介绍一下了: 首先Create 一个

详解Bypass UAC过程中踩过的坑(第一部分)

本文讲的是详解Bypass UAC过程中踩过的坑(第一部分),我目前正在尝试对Chrome沙盒进行一些改进.而作为其中的一部分,我现在正在对我的沙盒攻击Surface 分析工具进行更新,因为我想衡量我对Chrome做的事情是否具有实际的安全性.但事实上当我在进行这一切时,我一直躲不开绕过UAC的麻烦,这就导致进程出现了问题.所以为了顺便演示下我以前在UAC绕过的博文中所讲的,我决定将这一切再来一次.当我完成这一切的时候,我将使用最新版本的NtObjectManager  Powershell模块

详解Bypass UAC 过程中踩过的坑(第二部分)

本文讲的是详解Bypass UAC 过程中踩过的坑(第二部分),在第1部分完成后,我们知道普通用户在拆分令牌管理登录中处理可以获得对升级进程的Terminate,QueryLimitedInformation 和  Synchronize进程访问权限的访问.这是由于正常的用户和管理员具有默认DACL,该默认DACL授予对同一桌面上所有令牌设置的当前登录会话的执行访问权限.我们接下来的问题是如何才能提升你的权限? 在我们拥有的3个访问权限中, Terminate 和 Synchronize 都不是

tcpip-TCPIP详解卷一第二版中关于TIME_WAIT态的问题

问题描述 TCPIP详解卷一第二版中关于TIME_WAIT态的问题 在TCPIP详解卷一第二版英文版的第622页, 作者描述了一个使用SO__REUSEADDR来实现地址复用的例子, 在例子的第一行,作者输入了两次"sock -A -v -s 6666",这里输入两次有什么深意吗? 之后作者又输入了"sock -b 32840 -v 127.0.0.1 6666"代表本地客户端从32840端口连接到本地的6666端,这里直接就提示地址被使用,这是什么原因?这个端口与

详解C语言编程中的函数指针以及函数回调_C 语言

函数指针: 就是存储函数地址的指针,就是指向函数的指针,就是指针存储的值是函数地址,我们可以通过指针可以调用函数. 我们先来定义一个简单的函数: //定义这样一个函数 void easyFunc() { printf("I'm a easy Function\n"); } //声明一个函数 void easyFunc(); //调用函数 easyFunc(); //定义这样一个函数 void easyFunc() { printf("I'm a easy Function\n

详解C语言编程中预处理器的用法_C 语言

预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人. 预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法. #include <stdio.h> #define MACRO_OF_MINE #ifdef MACRO_OF_MINE #else #endif 上述五个预处理是最常看见的,第一个代表着包含一个头文件,可以理解为没有它很多功能都无法使用,例如C语言并没有把输入输入纳入标准当中,而是使用库函数来提供,所以只有包含了stdio.h这个头文

详解Java多线程编程中线程的启动、中断或终止操作_java

线程启动: 1.start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用. run() : run()就和普通的成员方法一样,可以被重复调用.单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程! 下面以代码来进行说明. class MyThread extends Thread{ public void run(){ ... } }; MyThread mythread = new

详解Java设计模式编程中命令模式的项目结构实现_java

正论: 命令模式把一个请求或者操作封装到一个对象中.命令模式运行系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 通俗: 其实很好理解.命令模式,关心的就是命令(或者称为操作).打个比方.在一个公司里面,整个运作就像一个系统.某个boss发布了一个命令,中层领导接到这个命令,然后指派给具体负责这个员工.整个流程很清晰吧.有一个需求,如何将这个流程固定下来,形成一个系统.我们只要抓住了重点:命令.将它抽取出来,其他的都迎刃而解了.抽取出命令,封装成一个独

详解JavaScript节流函数中的Throttle_javascript技巧

首先我们来了解下什么是Throttle     1. 定义 如果将水龙头拧紧直到水是以水滴的形式流出,那你会发现每隔一段时间,就会有一滴水流出. 也就是会说预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期.       接口定义: * 频率控制 返回函数连续调用时,action 执行频率限定为 次 / delay * @param delay {number} 延迟时间,单位毫秒 * @param action {function} 请求关联函数,实际应用