- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我无法解释竞争检测器中 println
和 fmt.Println
的不同输出。我希望两者都是种族,或者至少两者都不是种族。
package main
var a int
func f() {
a = 1
}
func main() {
go f()
println(a)
}
并且,它会按预期找到竞争条件。
0
==================
WARNING: DATA RACE
Write by goroutine 5:
main.f()
/home/felmas/test.go:6 +0x30
Previous read by main goroutine:
main.main()
/home/felmas/test.go:11 +0x4d
Goroutine 5 (running) created at:
main.main()
/home/felmas/test.go:10 +0x38
==================
Found 1 data race(s)
但是,这个运行时没有检测到任何比赛。
package main
import "fmt"
var a int
func f() {
a = 1
}
func main() {
go f()
fmt.Println(a)
}
据我所知,没有检测到竞争并不意味着没有竞争,所以这是这些缺陷之一还是有更深入的解释,因为 println
是内置的并且非常特殊?
最佳答案
race detector 是一个动态测试工具,没有静态分析。为了从竞争检测器获得可靠的结果,您应该争取程序的高测试覆盖率,最好通过编写大量 benchmarks 来实现。使用多个进程(通过设置 GOMAXPROCS > 1,GOMAXPROCS=NumCPU 是 Go 1.5 的默认设置)并使用持续集成工具定期执行这些测试。
竞争检测器不会报告任何误报,因此您应该认真对待每一个输出。另一方面,它可能无法在每次运行时检测到每场比赛,具体取决于 goroutine 和进程的调度顺序。
在您的示例中,将所有内容包装在一个紧密的循环中并重新执行测试在两种情况下都正确报告了比赛。
关于go - println 和 fmt.Println 的竞争检测器输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632243/
我都见过,事实上,在观察后我并没有意识到有什么区别。但两者之间真的有什么区别 println(); // without quotation marks 和 println(""); // wi
当运行这个 java 程序时,我希望输出只是第一个 println,因为其他方法,quaffle 和 snitch 只返回整数。但是,该程序的输出还包括 quaffle 和 snitch 方法的 pr
我开始学习 jsp 并且我看到,如果我们想在 jsp 中打印一些东西,我们必须编写 out.println() 而不是 System.out.println() ,但是如果我们编写 System.ou
我刚刚写了这段代码: public class T { public String toString() { System.out.println("new line");
我一直在研究 Swift,刚刚遇到了一个问题。我有以下词典: var locations:Dictionary = ["current":CLLocationCoordinate2D(latitude
我有这个代码: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
我一直在研究 Swift,刚刚遇到了一个问题。我有以下词典: var locations:Dictionary = ["current":CLLocationCoordinate2D(latitude
我无法解释竞争检测器中 println 和 fmt.Println 的不同输出。我希望两者都是种族,或者至少两者都不是种族。 package main var a int func f() {
我一直以为Predef.println只是 System.out.println 的快捷方式,但显然我错了,因为它似乎没有使用 System.out根本不。为什么会这样?我该如何“重定向” Syste
我有一个字符串数组: val str:Array[String] = Array("aa","bb") scala> str.foreach(println) // works aa bb scala
这个问题已经有答案了: Move console cursor to specified position (4 个回答) 已关闭 7 年前。 我正在使用简单的 println 行在 java 上工作
这是我现在正在做的一个简单测试用例的代码: private static final ByteArrayOutputStream OUTCONTENT = new ByteArrayOutputStr
public static void algorithmOne(int n){ long startTime = System.currentTimeMillis(); sea
我有以下代码: @Test public void testMultipleUpdatesSameTime() { final CyclicBarrier gate = new Cyc
我正在尝试创建一个可打印的命令提示板,以便在 CMD 中创建一个 TicTacToe 游戏。虽然,当我为我的董事会和我的单元格创建类(class)时,Java 在我的 print 和 println
我有 char c1 = 'S'; // S as a character char c2 = '\u0068'; // h in Unicode char c3 = 0
这是我的代码(golang) func main() { names := []string{"1", "2", "3"} for index, name := range names
来自 log.go (日志包的实现): 167 // Println calls l.Output to print to the logger. 168 // Arguments are handl
为什么我需要使用 System.out.println而不是 println当我使用 GroovyInterceptable ? 例如,如果我在 Groovy 文件中编码,我可以通过键入以下内容打印到
当我编写计算器应用程序时,我只是想不出最好的方法是什么: private void calculate(String command) { System.out.print("value1:
我是一名优秀的程序员,十分优秀!