我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:盛源彩票 > 泛型类 >

javascript 中的泛型详解

归档日期:05-02       文本归类:泛型类      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  电脑技术,软件开发。移动开发。网站建设相关专业知识。都可以提供解答和相关技术指导。

  泛型就是给集合规定成员类型 没有别的 但是具体使用方面却又各种方法 自己网上查吧

  为了能使用LockingPtr,你要用你操作系统用到的数据结构和基本函数来实现Mutex。

  尽管简单,LockingPtr对写出正确的多线程代码非常有帮助。你应该把被几个线程共享的对象定义为volatile而且不能对它们使用const_cast——应该始终使用LockingPtr自动对象。我们通过一个例子来说明:

  在一个线程函数中,你简单地使用一个LockingPtrBufT来取得对buffer_成员变量的受控访问:

  这些代码既非常容易写也非常容易懂——任何时候你需要用到buffer_,你必须创建一个LockingPtrBufT指向它。一旦你这样做,你就能够使用vecotr的所有接口。

  LockingPtr非常有表现力。如果你只需要调用一个函数,你能够创建一个无名临时LockingPtr对象并直接使用它:

  我们已经看到了volatile保护对象不被不受控制地访问时是多么出色,也看到了LockingPtr提供了多么简单和高效的方法来写线程安全的代码。让我们回到基本类型,那些加了volatile后行为与用户自定类型不同的类型

  如果Increment和Decrement被不同线程调用,上面的代码片段是有问题的。首先,ctr_必须是volatile,其次,即使象 ctr_那样看上去是原子操作的函数实际上是一个三步操作。内存本身没有算术能力,当递增一个变量时,处理器:

  如果那时另一个处理器对同一个变量执行一个RMW操作,我们就有了一个竟态条件;第二个写操作覆盖了第一个的结果。

  现在代码正确了,但代码质量比较SyncBuf的代码而言差了很多。为什么?因为在Counter里,如果你错误地直接访问ctr_(没有先对它加锁)编译器不会警告你。如果ctr_是volatile, ctr_也能编译通过,但产生的代码明显是错误的。编译器不再是你的帮手了,只有靠你自己注意才能避免这样的竟态条件。

  那你应该怎么做?简单地把你用到的基本数据包装为更高层次的结构,对那些结构用volatile。荒谬的是,尽管本来volatile的用途是用在内建类型上,但实际上直接这样做不是个好主意!

  到目前为止,我们已经有了包含有volatile数据成员的类,现在我们来考虑设计作为更大对象一部分的类,这些类也被多线程共享。在这里用volatile成员函数有很大帮助。

  当设计你的类时,你只对那些线程安全的成员函数加voaltile标识。你必须假定外部代码会用任何代码在任何时刻调用volatile函数。不要忘记:volatile等于可自由用于多线程代码而不用临界区,非volatile等于单线程环境或在一个临界区内。

  例如,你定义一个Widget类,实现一个函数的两个变化——一个线程安全的和一个快的,无保护的。

  注意用了重载。现在Widget的用户可以用同样的语法来调用Operation,无论你为了获得线程安全调用volatile对象的Operation还是为了获得速度调用常规对象的Operation。但用户必须小心地把被多线程共享的Widget对象定义为volatile。

  当实现一个volatile成员函数时,第一个操作通常是对this用一个LockingPtr加锁。剩下的工作可以交给非volatile的对应函数:

  当写多线程程序时,你可以用volatile得到好处。你必须遵守下面的规则:

  如果你这样做,而且如果你使用那个简单的返型组件LockingPtr,你能够写出线程安

  全的代码而不用更多考虑竟态条件,因为编译器能为你留心,会为你主动指出你错误的地方。

  我参与的几个使用volatile和LockingPtr的计划获得很好的效果。代码清晰易懂。我记得碰到几处死锁,但我情愿遇到死锁也不要竟态条件,因为死锁调试起来容易得多。事实上没有遇到任何问题是关于竟态条件的。

  知道合伙人IT服务行家采纳数:1569获赞数:6115从事多年前端。关注互联网、软件开发。热爱分享~向TA提问展开全部

  其实,JavaScript 没有泛型这个概念的。它是弱类型语言。变量在指定值的时候是不需要指定类型的。

  下面的链接是讲解 typescript 泛型相关的内容,有兴趣可以看看。

本文链接:http://buggystordera.com/fanxinglei/88.html