/// <summary> /// return sentence spliter to the pool /// </summary> /// <param name="sspliter"></param> public static void ReturnSSpliter(SentenceSpliter sspliter) { for (var i = 0; i < sspliters.Count; i++) { if (sspliter == sspliters[i]) { lock (availableSSpliters) { availableSSpliters.Add(i); } break; } } }
/// <summary> /// Get a sentence spliter from parser pool /// </summary> /// <returns></returns> public static SentenceSpliter GetSSpliter() { lock (locker) { lock (availableSSpliters) { if (availableSSpliters.Count > 0) { var index = availableSSpliters.First(); availableSSpliters.Remove(index); return(sspliters[index]); } else if (sspliters.Count < maxSSpliterNum) { if (availableSSpliters.Count == 0) { var sspliter = new SentenceSpliter(); sspliters.Add(sspliter); return(sspliter); } else { var index = availableSSpliters.First(); availableSSpliters.Remove(index); return(sspliters[index]); } } } { while (availableSSpliters.Count == 0) { Thread.Sleep(10); } var index = availableSSpliters.First(); availableSSpliters.Remove(index); return(sspliters[index]); } } }