我有一个由Consumer
类和Producer
类组成的线程程序。目前,我在实现中使用了Fifo queue.Queue
,其中生产者put
是队列末尾的数据,消费者get
是它。
但是,我想添加一个功能,如果有必要的话,Consumer
可以put
将get
的项目(可能稍微修改过一点)归还Queue
get
的前面(以便deque
返回的下一个项目是刚刚添加的项目,就像在堆栈中一样)。
我知道这可以通过append()
来实现,但我已经阅读here它们对popleft()
和appendleft()
只是线程安全的。出于上述目的,我还需要使用deque
。
是否存在具有deque
功能的线程安全数据结构?如果没有,我可以在使用appendleft
时通过放入自己的锁来使 using (DEntities Context = DAOHelper.GetObjectContext<DEntities>())
{
Guid aspUserIdToRemove = Context.ExecuteStoreQuery<string>("Select UserId FROM aspnet_Users where UserName LIKE '%" + userName + "%'").ElementType.GUID;
string aspUserId = aspUserIdToRemove.ToString();
aspUserId = aspUserId.Replace("{", string.Empty);
aspUserId = aspUserId.Replace("}", string.Empty);
Context .ExecuteStoreCommand("DELETE FROM aspnet_Membership where UserId = '" + aspUserId + "'");
Context .ExecuteStoreCommand("DELETE FROM aspnet_UsersInRoles where UserId = '" + aspUserId + "'");
Context .ExecuteStoreCommand("DELETE FROM aspnet_Users where UserId = '" + aspUserId + "'");
线程安全吗?
答案 0 :(得分:1)
这里是Deque作者。
希望这会有所帮助:-)
答案 1 :(得分:0)