我正在尝试理解Java 发生 - 在订单概念之前,有一些东西看起来很混乱.据我所知,之前发生的只是行动集上的一个订单,并没有提供有关实时执行订单的任何保证.实际上(强调我的):
应该注意的是,两个动作之间存在的先发生关系并不一定意味着它们必须在实现中以该顺序发生.如果重新排序产生的 结果与合法执行一致,则不是非法的.
因此,所有它说的是,如果有两个动作w
(写)和r
(读),使得HB(W,R) ,较r
可能实际发生之前,w
在执行,但不能保证它会的.w
读取也会观察到写入r
.
我如何确定在运行时随后执行两个操作?例如:
public volatile int v;
public int c;
Run Code Online (Sandbox Code Playgroud)
操作:
Thread A
v = 3; //w
Thread B
c = v; //r
Run Code Online (Sandbox Code Playgroud)
这里我们有,hb(w, r)
但这并不意味着在分配后c
会包含价值3
.如何强制执行c
3?同步订单是否提供此类保证?
我正在阅读关于限定名称查找的条款.引用来自:
如果嵌套名称说明符中的:: scope resolution运算符前面没有decltype-specifier,则查找此前面的名称::仅考虑其专门化为类型的名称空间,类型和模板.
根据标准的定义decltype-specifier
是:
decltype-specifier:
decltype ( expression )
decltype ( auto )
Run Code Online (Sandbox Code Playgroud)
这是什么意思?你能解释一下这个关键词的用途吗?
这个参数对tomcat意味着什么.它的声明server.xml
如下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)
所以,我试着改变它
<Connector connectionTimeout="2" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)
并没有注意到任何影响.我预计加载所需的每个页面超过2毫秒将产生504 - 连接超时错误.但事实并非如此.我正在使用eclipse并通过它修改该文件.
我正在使用PostgreSQL 9.4.
如果批处理中的某些查询已经执行,那么在执行事务批处理更新(批处理大小= 50)期间有人杀死JVM进程会发生什么?
数据库中会有什么?
我看过演示文稿,但仍然有一个关于共享缓冲区工作的问题.如幻灯片16所示,当服务器处理传入请求时,postmaster
进程调用fork()
以创建用于处理传入请求的子节点.这是一张照片:
因此,除了它之外,我们拥有postmaster流程的完整副本pid
.现在,如果子进程更新属于共享内存的某些数据(放入共享缓冲区,如幻灯片17所示),我们需要其他线程知道这些更改.图片:
同步化过程是我不明白的.任何进程都拥有共享内存的副本,并且在复制时不知道另一个线程是否会将某些内容写入共享内存的副本.如果proc1
通过调用创建后,稍后创建fork()
另一个进程proc2
并开始在共享内存的副本中写入内容,该怎么办?
问题:如何proc1
知道如何处理被修改的共享内存部分proc2
?
我试图从lambda表达式增加一个局部变量:
#include <iostream>
template<typename T>
T foo(T t){
T temp{};
[temp]() -> void {
temp++;
}();
return temp;
}
int main()
{
std::cout<< foo(10) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但得到以下错误:
main.cpp: In instantiation of 'foo(T)::<lambda()> [with T = int]':
main.cpp:6:6: required from 'struct foo(T) [with T = int]::<lambda()>'
main.cpp:8:6: required from 'T foo(T) [with T = int]'
main.cpp:14:23: required from here
main.cpp:7:13: error: increment of read-only variable 'temp'
temp++;
^
Run Code Online (Sandbox Code Playgroud)
在c ++ 11/14中是否有一些解决方法?
我正在比较性能MethodHandle::invoke
和直接静态方法调用.这是静态方法:
public class IntSum {
public static int sum(int a, int b){
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的基准:
@State(Scope.Benchmark)
public class MyBenchmark {
public int first;
public int second;
public final MethodHandle mhh;
@Benchmark
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public int directMethodCall() {
return IntSum.sum(first, second);
}
@Benchmark
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public int finalMethodHandle() throws Throwable {
return (int) mhh.invoke(first, second);
}
public MyBenchmark() {
MethodHandle mhhh = null;
try {
mhhh = MethodHandles.lookup().findStatic(IntSum.class, "sum", MethodType.methodType(int.class, int.class, int.class));
} catch (NoSuchMethodException …
Run Code Online (Sandbox Code Playgroud) 我试图理解printf
C中的一个简单案例是如何工作的.我写了以下程序:
#include "stdio.h"
int main(int argc, char const *argv[])
{
printf("Test %s\n", argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行objdump
在二元我注意到Test %s\n
寓于.rodata
objdump -sj .rodata bin
bin: file format elf64-x86-64
Contents of section .rodata:
08e0 01000200 54657374 2025730a 00 ....Test %s..
Run Code Online (Sandbox Code Playgroud)
如此格式化的打印似乎执行从rodata
其他地方的其他模式复制.
在编译并运行它之后,stare ./bin rr
我注意到brk
在实际写入之前有一个系统调用.所以运行它
gdb catch syscall brk
gdb catch syscall write
Run Code Online (Sandbox Code Playgroud)
显示在我的情况下,当前中断等于0x555555756000
,但然后设置为0x555555777000
.当write
发生格式化的字符串时
x/s $rsi
0x555555756260: "Test rr\n"
Run Code Online (Sandbox Code Playgroud)
位于"旧"和"新"休息之间.写入发生后,程序退出.
问题:为什么我们分配了这么多页面,为什么在写入系统调用后,中断没有返回到前一个页面?是否有任何理由使用brk
而不是mmap …
我正在编写一个要加载到JVM中的共享库,下面的行为让我陷入困境.这是我的Java类:
package com.test;
public class UnixUtil {
static {
System.loadLibrary("myfancylibrary");
}
static native int openReadOnlyFd(String path);
static native int closeFd(int fd);
}
public class Main {
public static void main(String[] args){
int fd = UnixUtil.openReadOnlyFd("/tmp/testc");
UnixUtil.closeFd(fd);
}
}
Run Code Online (Sandbox Code Playgroud)
要加载的库看起来像:
test_jni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_UnixUtil */
#ifndef _Included_com_test_UnixUtil
#define _Included_com_test_UnixUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_UnixUtil
* Method: openReadOnlyFd
* Signature: (Ljava/lang/String;)I …
Run Code Online (Sandbox Code Playgroud)