我有一个x86,linux的盒子.在阅读有关ARM的各种信息时,我很好奇,现在我正在考虑花一些时间学习这种架构.我目前的目标是能够为ARM编写简单的汇编程序,使用一些汇编程序为ARM生成目标代码,并能够在仿真的ARM机器上运行该程序.首先,我已经下载了ARM体系结构参考手册.根据这里的信息,Linux上不支持Keil,因此请帮助我使用我需要的工具(汇编器,模拟器).
我最近开始研究用C语言编写的API.我看到一些子程序需要8个(8个)参数,对我而言,在调用该特定子程序时,它看起来很丑陋,传递8个参数.我想知道是否可以实施更可接受和更清洁的方式.
我正在学习pthread并遇到了读者作家锁.场景非常简单; 由所有线程共享的全局变量,reader继续打印同一个全局变量的当前值,而writer将更新同一个变量.我可以通过使用两个互斥锁(pthread_mutex_t)来实现此同步,但我想使用"一个"读写器锁来实现相同的结果.但是,使用一个读写器锁定,如此处所示(程序的输出,下面),读者只能看到x的第一个值,并且看不到对全局变量的任何更新.请点亮这里.
码:
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <pthread.h>
#include <poll.h>
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
int x = 0;
pthread_rwlock_t lock_rw = PTHREAD_RWLOCK_INITIALIZER;
void *reader_thread(void *arg)
{
int i;
int newx, oldx;
newx = oldx = -1;
pthread_rwlock_t *p = (pthread_rwlock_t *)arg;
if (pthread_rwlock_rdlock(p) != 0) {
perror("reader_thread: pthread_rwlock_rdlock error");
exit(__LINE__);
}
for (i = 0; i < 100; i++) {
newx = ACCESS_ONCE(x);
if (newx != oldx) {
printf("reader_lock: x: %d\n",x);
}
oldx = newx;
poll(NULL, …Run Code Online (Sandbox Code Playgroud) 我参加了算法课程,其中讲师决定使用Ada作为编程语言工具来测试我们的理解.争论的焦点是ADA语言非常接近CLRS书中出现的伪代码.
下面的代码是ADA中选择排序的剪辑:
procedure Selection_Sort(Data : in out List) is
begin
for Destination_Index in Data'Range loop
for Source_Index in Destination_Index + 1 .. Data'Last loop
if Data(Source_Index) < Data(Destination_Index) then
Swap(Data, Source_Index, Destination_Index);
end if;
end loop;
end loop;
end Selection_Sort;
Run Code Online (Sandbox Code Playgroud)
下列:
for Source_Index in Destination_Index + 1 .. Data'Last loop
Run Code Online (Sandbox Code Playgroud)
将导致从给定元素(数据1)遍历数组到最后一个元素,但是如果我希望从最后一个元素遍历到第一个元素,则以下似乎不起作用.
for Source_Index in Data'Last .. Data'First loop
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮我解决这个微不足道的问题,那将是非常有帮助的,这样我就可以继续处理手头的主要问题,即学习算法.