是否有类似于pipefail的多个命令,比如'try'语句但在bash中.我想做这样的事情:
echo "trying stuff"
try {
command1
command2
command3
}
Run Code Online (Sandbox Code Playgroud)
并且在任何时候,如果任何命令失败,则退出并回显该命令的错误.我不想做以下事情:
command1
if [ $? -ne 0 ]; then
echo "command1 borked it"
fi
command2
if [ $? -ne 0 ]; then
echo "command2 borked it"
fi
Run Code Online (Sandbox Code Playgroud)
等等......或类似的东西:
pipefail -o
command1 "arg1" "arg2" | command2 "arg1" "arg2" | command3
Run Code Online (Sandbox Code Playgroud)
因为我相信的每个命令的参数(如果我错了,纠正我)会相互干扰.这两种方法对我来说似乎非常啰嗦和讨厌,所以我在这里呼吁采用更有效的方法.
为了说清楚,我不打算在这里使用任何类型的便携性,所以任何将我绑定到某个盒子的解决方案都可以.
基本上,我有一个if语句将99%的时间评估为true,并且我试图剔除每个性能的最后一个时钟,我可以发出某种编译器命令(使用GCC 4.1.2和x86 ISA,如果告诉分支预测器它应该缓存该分支吗?
如果我有一个数字a,我希望x的值在b = 2 ^ x,其中b是2的下一个幂大于a.
如果您错过了标记,那么这是Java,而a是一个int.我正在寻找最快的方法来做到这一点.我的解决方案就是使用bit-twiddling来获取b,然后执行(int)(log(b)/ log(2)),但我觉得必须有一个更快的方法,不涉及划分两个浮动 -点数.
如果我有以下两个类:
// Base.java
public abstract class Base<T> {
abstract void method(T t);
}
Run Code Online (Sandbox Code Playgroud)
和
// Derived.java
public class Derived extends Base<Number> {
@Deprecated
void method(Number n) {}
}
Run Code Online (Sandbox Code Playgroud)
然后我用它们编译它们javac Base.java Derived.java然后使用javap -v Derived.如果我使用Java 7,我会得到
public class Derived extends Base<java.lang.Number>
Signature: #17 // LBase<Ljava/lang/Number;>;
SourceFile: "Derived.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #5.#20 // Base."<init>":()V
#2 = Class #21 // java/lang/Number
#3 = Methodref #4.#22 // Derived.method:(Ljava/lang/Number;)V
#4 = …Run Code Online (Sandbox Code Playgroud) 给定一个浮点数,我希望得到一个String近似小数的有理数的表示(在给定的容差范围内ε很好).我目前的做法如下:
String rationalize(double d)
{
String s = Double.toString(d);
s = s.substring(s.indexOf('.')+1, s.length());
return s + " / " + ApintMath.pow(new Apint(10), s.length()).toString();
}
Run Code Online (Sandbox Code Playgroud)
如果你不熟悉它,ApintMath.pow即使使用任意长数也会工作,这很好,因为我试图转换小数位数千位的小数.我的算法的性能很糟糕.
我将此归结为两件事,但可能会有更多:
你会怎么做?还有其他我没有谈过的领域让我感到沮丧吗?
我正在快速搜索大量数据,为了好玩,我试图将其并行化以加快排序.但是,在它的当前形式中,由于同步阻塞点,多线程版本比单线程版本慢.
每次我产生一个线程,我得到一个锁在一个int并加一,而每次线程完成我再次得到锁和减量,除了检查是否有仍然运行(INT> 0)的线程.如果没有,我唤醒我的主线程并使用已排序的数据.
我相信有更好的方法可以做到这一点.不知道它是什么.非常感谢帮助.
编辑:我想我没有提供足够的信息.
这是octo-core Opteron上的Java代码.我无法切换语言.
我正在排序的数量适合内存,并且在调用quicksort时它已经存在于内存中,因此没有理由将其写入磁盘只是将其读回内存.
通过"获取锁定"我的意思是在整数上有一个同步块.
所以我试图找到有关 Michael Rabin 算法的详细信息,该算法在 O(n) 时间内找到给定一组 2D 点的最近邻点。出于某种原因,谷歌搜索完全让我失望。我找到的最好的(也是唯一的)描述在这里:http : //rjlipton.wordpress.com/2009/03/01/rabin-flips-a-coin/。
如果有人对此有所了解,或者知道在哪里可以找到有关该主题的书籍或论文(最好是在线!),我非常感谢您的参与。
我有一个帖子:
class Foo extends Thread
{
boolean active = true;
public void run()
{
while(active)
{
//do stuff
}
}
public void end()
{
active = false;
}
public void hibernate()
{
synchronized(this)
{
wait();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果另一个线程调用end(),会Foo立即看到active现在是false什么?具体来说,因为active不是volatile,我不确定它会不会.我最初创建的end()是一种避免易变的聪明方法,但现在我不确定它实际上会做我想做的事情.另外,如果另一个线程调用hibernate(),哪个线程将进入休眠状态?我打算Foo睡觉,所以如果这不符合我的意图,那么另一个建议将非常受欢迎.
说我有三架C风格的字符串,char buf_1[1024],char buf_2[1024],和char buf_3[1024].我想对它们进行标记化,并使用所有三个中的第一个标记执行操作,然后对所有三个中的第二个标记执行相同操作等.显然,strtok每次我想要一个新标记时,我可以从头开始调用并循环它们.或者,预先处理所有令牌,将它们分成三个阵列并从那里开始,但我想要一个更清洁的解决方案,如果有的话.
我的问题与为什么MySQL自动增量在失败的插入上增加一样?,但id我不想增加我的字段,我宁愿只重写INSERT导致我麻烦的查询.假设我有一个包含两个字段的数据库,id并且username,哪里id是主键并且username是唯一键.我基本上是在寻找能够做到的语法INSERT...IF NOT EXISTS.现在,我做到了
INSERT INTO `table`(`username`)
VALUES ('foo')
ON DUPLICATE KEY UPDATE `id`=`id`
Run Code Online (Sandbox Code Playgroud)
我只有一个线程写入数据库,所以我不需要任何类型的并发保护.建议?
为了记录,我是一个完整的Verilog新手.我正在编写一个使用少量双向总线的模块.
inout wire [KEY_SIZE-1:0] prevKey;
inout wire [TAG_SIZE-1:0] prevTag;
inout wire [KEY_SIZE-1:0] nextKey;
inout wire [TAG_SIZE-1:0] nextTag;
Run Code Online (Sandbox Code Playgroud)
我知道如何从公共汽车上读取东西,但我该怎么写东西呢?如果我对a使用assign语句reg,reg当新数据进入线路时,get 的值是否会被破坏?处理一个inout值得麻烦的港口,还是我应该为每个港口做一个input和output公共汽车?
相关代码是这样的:
typedef unsigned long int chunk_head;
typedef struct malloc_chunk
{
// Contains the size of the data in the chunk and the flag byte.
chunk_head head;
// Deliberately left unsized to allow overflow.
// Contains the payload of the chunk.
unsigned int data[];
};
Run Code Online (Sandbox Code Playgroud)
举个例子,"get"宏是这样的:
//Get the size of the data contained within the chunk.
#define GET_CHUNK_SIZE(chunk) ((chunk.head) & 0xFFFFFF)
Run Code Online (Sandbox Code Playgroud)
高位字节我正在使用标志位 - "inuse"和"可以合并",而我找到的任何其他字节都是有用的.
现在我已经完成了提供背景信息,正如我在标题中所说的那样,我需要能够将较低的3个字节更改为块的大小.我最初的本能是按位和大小的标头,因为它会正确对齐,但后来我意识到它也可能会覆盖标志字节,因为它会自动加上零,直到它的大小与长整数相匹配.我甚至不确定你可以按位和一个int和一个long.无论如何,帮助非常感谢.