亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程安全模式

線程安全模式

Go
森林海 2022-09-19 10:05:11
我是這樣寫的代碼:首先,我用螞蟻創建例程池:var pool, _ = ants.NewPoolWithFunc(5, func(commitDiff interface{}) {    AnalyzeCommitDiff(commitDiff.(diffParsedType))})*函數分析提交Diff() 包含我的antlr_analysis函數然后我寫了這些:var (    lexerPool *sync.Pool = &sync.Pool{New: func() interface{} {        return javaparser.NewJavaLexer(nil)    }}    parserPool *sync.Pool = &sync.Pool{New: func() interface{} {        return javaparser.NewJavaParser(nil)    }}    newTreeShapeListener *sync.Pool = &sync.Pool{New: func() interface{} {        return new(TreeShapeListener)    }})func executeJava(diffText string) javaparser.AnalysisInfoType {    input := antlr.NewInputStream(diffText)    lexer := lexerPool.Get().(*javaparser.JavaLexer)    defer lexerPool.Put(lexer)    lexer.SetInputStream(input)    stream := antlr.NewCommonTokenStream(lexer, 0)    p := parserPool.Get().(*javaparser.JavaParser)    defer parserPool.Put(p)    p.SetTokenStream(stream)    //p.AddErrorListener(antlr.NewDiagnosticErrorListener(true))    p.BuildParseTrees = true    p.GetInterpreter().SetPredictionMode(antlr.PredictionModeSLL)    tree := p.CompilationUnit()    listener := newTreeShapeListener.Get().(*TreeShapeListener)    defer newTreeShapeListener.Put(listener)    antlr.ParseTreeWalkerDefault.Walk(listener, tree)    return javaparser.Infos}但顯然存在問題,因為線程不安全。如何使代碼線程安全?誰能給我舉個例子嗎?
查看完整描述

1 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

線程池不適用于 ANTLR4。出于性能原因,除了一個由解析器或詞法分析器訪問共享 DFA 的位置之外,沒有額外的線程處理。

因此,使用線程的唯一方法是將詞法分析器/解析器實例關聯到線程,并僅從此單個線程訪問該線程。每個解析器實例使用專用線程,并且永遠不要在線程之間共享詞法分析器/解析器。


查看完整回答
反對 回復 2022-09-19
  • 1 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號