网站如何做后台留言,wordpress头像不同步,店铺怎么做推广和宣传,企业品牌网站建设类型说明 本文主要说明#xff0c;在angularJS框架使用中#xff0c;angularJS 路由加载js controller 未定义 解决方案。 路由 $routeProvider 异步加载js 路由的基本用法#xff0c;请查看官方文档#xff0c;下面实例只说明#xff0c;懒加载用法。 … 说明 本文主要说明在angularJS框架使用中angularJS 路由加载js controller 未定义 解决方案。 路由 $routeProvider 异步加载js 路由的基本用法请查看官方文档下面实例只说明懒加载用法。 实例使用版本: angularJS:1.7.6 ocLazyLoad:1.1.0 片段说明 通过路由懒加载js需要引用第三方ocLazyLoad库加载并且修改被加载脚本代码防止控制器出现未定义现象。 定义 ocLazyLoad 库 angular.module(app_name, [ngRoute,ngSanitize,oc.lazyLoad]) 路由设置 angular.config([$routeProvider, function($routeProvider){ $routeProvider // 路由示例图 .when(/,{ // 模版地址 templateUrl:/PC/Public/Template/CustomerData.php, // 控制器名字 controller:controller_name, // 依赖请求 resolve: { // 调用 ocLazyLoad deps: [$ocLazyLoad,function (e) { return e.load([/PC/Public/Template/L/L0/CustomerModel/CustomerData.js]); 一、自旋锁简介 通常情况下解决多线程共享资源逻辑一致性问题有两种方式 互斥锁当发现资源被占用的时候会阻塞自己直到资源解除占用然后再次尝试获取 自旋锁当发现占用时一直尝试获取锁线程没有被挂起的过程也就没有线程调度切换的消耗 对于这两种方式没有优劣之分只有是否适合当前的场景具体的对比就不在继续深入了如果你很感兴趣可以查看 《多处理器编程的艺术》 提取码rznn 但是如果竞争非常激烈的时候使用自旋锁就会产生一些额外的问题 可能导致一些线程始终无法获取锁争抢的时候必然是当前活跃线程获得锁的几率大也就是饥饿现象 因为自旋锁会依赖一个共享的锁标识所以竞争激烈的时候锁标识的同步也需要消耗大量的资源 如果要用自旋锁实现公平锁即先到先获取此时就还需要额外的变量也会比较麻烦 解决这些问题其中的一种办法就是使用队列锁简单来讲就是让这些线程排队获取下面我们介绍常用的两种即 CLH 锁 和 MCS 锁 二、CLH 锁 CLH 是 Craig、Landin 和 Hagersten 三位作者的缩写具体内容在 Building FIFO and Priority-Queuing Spin Locks from Atomic Swap 论文中有详细介绍大家可以自行查看我们 JDK 中 java.util.concurrent.locks.AbstractQueuedSynchronizer 就是根据 CLH 锁的变种实现的 简单实现 public class CLH implements Lock { private final ThreadLocalNode preNode ThreadLocal.withInitial(() - null); private final ThreadLocalNode node ThreadLocal.withInitial(Node::new); private final AtomicReferenceNode tail new AtomicReference(new Node()); private static class Node { private volatile boolean locked; } Override public void lock() { final Node node this.node.get(www.tiaotiaoylzc.com ); node.locked true; Node pre this.tail.getAndSet(node); this.preNode.set(pre); while (pre.locked) ; } Override public void unlock() { final Node node this.node.get(); node.locked false; this.node.set(this.preNode.get(www.yongxinzaixian.cn)); } } clh 三、MCS 锁 同样 MCS 是 John M. Mellor-Crummey 和 Michael L. Scott 名字的缩写具体内容可以在 Algorithms for Scalable Synchronization on Shared-Memory Multiprocessors 论文中查看 简单实现 public class MCS implements Lock { private final ThreadLocalNode node www.suoLaieyuLe.com ThreadLocal.withInitial(Node::new); private final AtomicReferenceNode tail new AtomicReference(); private static class Node { private volatile boolean locked false; private volatile Node next null; } Override public void lock(www.michenggw.com) { Node node this.node.get(); node.locked true; Node pre tail.getAndSet(node); if (pre ! null) { pre.next node; while (node.locked) ; } } Override public void unlock(www.ysyl157.com) { Node node this.node.get(); if (node.next null) { if (tail.compareAndSet(node,www.bsyL157.com null)) { return; } while (node.next null) ; } node.next.locked false; node.next null; } } clh 总结 以上的代码我已经测试过大家可以直接拿下来自行实验 CLH 锁和 MCS 锁区别主要有两点1. 链表结构的区别2. 自旋对象的区别CLH 是在前驱节点上自旋而 MCS 是在自身节点上自旋这里第二点才是最重要的主要体现在 SMP(Symmetric Multi-Processor) 和 NUMA(Non-Uniform Memory Access) 不同的处理器架构上这里大家可以自行 Google .otherwise({redirectTo:/}); }]); 被加载js代码 // 添加指定 app 名称防止出现未定义控制器 angular.module(www.shengbangyule178.cnapp_namewww.yongshi123.cn).controller(controller_name, [$scope, function ($scope) { console.log($scope); 转载于:https://www.cnblogs.com/qwangxiao/p/10567564.html