/// <summary> /// return stemmer to the stemmer pool /// </summary> /// <param name="stemmer"></param> public static void ReturnStemmer(Stemmer stemmer) { for (var i = 0; i < stemmers.Count; i++) { if (stemmer == stemmers[i]) { lock (availableStemmers) { availableStemmers.Add(i); } break; } } }
/// <summary> /// Get a stemmer from stemmer pool /// </summary> /// <returns></returns> public static Stemmer GetStemmer() { lock (locker) { lock (availableStemmers) { if (availableStemmers.Count > 0) { var index = availableStemmers.First(); availableStemmers.Remove(index); return(stemmers[index]); } else if (stemmers.Count < maxStemmerNum) { if (availableStemmers.Count == 0) { var stemmer = new Stemmer(); stemmers.Add(stemmer); return(stemmer); } else { var index = availableStemmers.First(); availableStemmers.Remove(index); return(stemmers[index]); } } } { while (availableStemmers.Count == 0) { Thread.Sleep(10); } var index = availableStemmers.First(); availableStemmers.Remove(index); return(stemmers[index]); } } }