Пример #1
0
 /// <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;
         }
     }
 }
Пример #2
0
 /// <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]);
         }
     }
 }